<!DOCTYPE html>
<html>
<head>
  <title>FE000000</title>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <meta content="utf-8" http-equiv="encoding">
  <script src="js/tslib.js"></script>
  <script src="js/break_infinity.min.js"></script>
  <script src="js/ad-notations.min.js"></script>
  <script src="js/ad-notations.community.min.js"></script>
  <script src="js/pako.min.js"></script>
  <script src="js/defined.js?time=%time%"></script>
  <script src="js/complexity/complexities.js?time=%time%"></script>
  <script src="js/complexity/complexity-achievements.js?time=%time%"></script>
  <script src="js/complexity/complexity-autobuyers.js?time=%time%"></script>
  <script src="js/complexity/complexity-challenge.js?time=%time%"></script>
  <script src="js/complexity/complexity-generators.js?time=%time%"></script>
  <script src="js/complexity/complexity-max-all.js?time=%time%"></script>
  <script src="js/complexity/complexity-points.js?time=%time%"></script>
  <script src="js/complexity/complexity-prestige-layer.js?time=%time%"></script>
  <script src="js/complexity/complexity-stars.js?time=%time%"></script>
  <script src="js/eternity/eternities.js?time=%time%"></script>
  <script src="js/eternity/eternity-autobuyers.js?time=%time%"></script>
  <script src="js/eternity/eternity-challenge.js?time=%time%"></script>
  <script src="js/eternity/eternity-generators.js?time=%time%"></script>
  <script src="js/eternity/eternity-max-all.js?time=%time%"></script>
  <script src="js/eternity/eternity-milestones.js?time=%time%"></script>
  <script src="js/eternity/eternity-points.js?time=%time%"></script>
  <script src="js/eternity/eternity-prestige-layer.js?time=%time%"></script>
  <script src="js/eternity/eternity-producer.js?time=%time%"></script>
  <script src="js/eternity/eternity-stars.js?time=%time%"></script>
  <script src="js/eternity/eternity-starting-benefits.js?time=%time%"></script>
  <script src="js/eternity/eternity-upgrades.js?time=%time%"></script>
  <script src="js/eternity/permanence-upgrades.js?time=%time%"></script>
  <script src="js/eternity/permanence.js?time=%time%"></script>
  <script src="js/finality/finalities.js?time=%time%"></script>
  <script src="js/finality/finality-generators.js?time=%time%"></script>
  <script src="js/finality/finality-max-all.js?time=%time%"></script>
  <script src="js/finality/finality-milestones.js?time=%time%"></script>
  <script src="js/finality/finality-points.js?time=%time%"></script>
  <script src="js/finality/finality-prestige-layer.js?time=%time%"></script>
  <script src="js/finality/finality-shards.js?time=%time%"></script>
  <script src="js/finality/finality-stars.js?time=%time%"></script>
  <script src="js/finality/finality-starting-benefits.js?time=%time%"></script>
  <script src="js/infinity/infinities.js?time=%time%"></script>
  <script src="js/infinity/infinity-autobuyers.js?time=%time%"></script>
  <script src="js/infinity/infinity-challenge.js?time=%time%"></script>
  <script src="js/infinity/infinity-generators.js?time=%time%"></script>
  <script src="js/infinity/infinity-max-all.js?time=%time%"></script>
  <script src="js/infinity/infinity-points.js?time=%time%"></script>
  <script src="js/infinity/infinity-prestige-layer.js?time=%time%"></script>
  <script src="js/infinity/infinity-stars.js?time=%time%"></script>
  <script src="js/infinity/infinity-upgrades.js?time=%time%"></script>
  <script src="js/notation/format.js?time=%time%"></script>
  <script src="js/notation/notation-options.js?time=%time%"></script>
  <script src="js/notation/notations.js?time=%time%"></script>
  <script src="js/rng.js?time=%time%"></script>
  <script src="js/achievements.js?time=%time%"></script>
  <script src="js/autobuyers.js?time=%time%"></script>
  <script src="js/boost.js?time=%time%"></script>
  <script src="js/challenge-exit-or-restart.js?time=%time%"></script>
  <script src="js/challenge-header-text.js?time=%time%"></script>
  <script src="js/challenge.js?time=%time%"></script>
  <script src="js/chroma.js?time=%time%"></script>
  <script src="js/colors.js?time=%time%"></script>
  <script src="js/coordinate.js?time=%time%"></script>
  <script src="js/explanations.js?time=%time%"></script>
  <script src="js/fit-to-width.js?time=%time%"></script>
  <script src="js/galaxy.js?time=%time%"></script>
  <script src="js/generators.js?time=%time%"></script>
  <script src="js/goals.js?time=%time%"></script>
  <script src="js/hotkeys.js?time=%time%"></script>
  <script src="js/loop.js?time=%time%"></script>
  <script src="js/main.js?time=%time%"></script>
  <script src="js/max-all.js?time=%time%"></script>
  <script src="js/multiverse-collapse.js?time=%time%"></script>
  <script src="js/news.js?time=%time%"></script>
  <script src="js/notifications.js?time=%time%"></script>
  <script src="js/options.js?time=%time%"></script>
  <script src="js/oracle.js?time=%time%"></script>
  <script src="js/player.js?time=%time%"></script>
  <script src="js/power-shards.js?time=%time%"></script>
  <script src="js/powers.js?time=%time%"></script>
  <script src="js/prestige-layer-names.js?time=%time%"></script>
  <script src="js/prestige-layer-progress.js?time=%time%"></script>
  <script src="js/prestige.js?time=%time%"></script>
  <script src="js/preset-sort.js?time=%time%"></script>
  <script src="js/range.js?time=%time%"></script>
  <script src="js/sacrifice.js?time=%time%"></script>
  <script src="js/safe-minus.js?time=%time%"></script>
  <script src="js/safe-pow.js?time=%time%"></script>
  <script src="js/saving.js?time=%time%"></script>
  <script src="js/stars.js?time=%time%"></script>
  <script src="js/stats.js?time=%time%"></script>
  <script src="js/studies.js?time=%time%"></script>
  <script src="js/tabs.js?time=%time%"></script>
  <script src="js/text-box.js?time=%time%"></script>
  <script src="js/trivia.js?time=%time%"></script>
  <script src="js/update-display.js?time=%time%"></script>
  <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
  <link rel="stylesheet" href="styles.css?time=%time%"></link>
</head>
<body>
  <div id="loading">
    <span>The game is loading; this message should only appear for a few seconds.</span>
    <br/>
    <span>If it shows up for a longer time, that's probably a bug and you should use the buttons below.</span>
    <br/>
    <span>Reloading might work, so probably try that first.</span>
    <br id="script-count-br" style="display: none;"/>
    <span id="script-count-span" style="display: none;">The page loads <span id="script-count"></span> scripts (should be 93).</span>
    <br/>
    <span><button onclick="window.location.reload(true)">Reload window</button> <button class="export-button" onclick="Saving.exportGame(0)">Export</button> <button onclick="Saving.loadGamePrompt()">Import/Load</button> <button onclick="Saving.resetGameWithConfirmation()">RESET THE GAME</button></span>
  </div>
  <div id="simulatetime" style="display: none;">
    <span>Time spent simulating ticks: <span id="timesimulated"></span></span>
    <br/>
    <span>Ticks simulated so far: <span id="tickssimulated"></span>/<span id="totaltickssimulated"></span></span>
    <br/>
    <span>Time to finish: <span id="expectedtotaltimesimulated"></span> total, <span id="expectedremainingtimesimulated"></span> remaining</span>
    <br/>
    <button onclick="Saving.speedUpOffline()">Speed up offline progress (doing fewer ticks)</button>
    <br/>
    <button onclick="Saving.slowDownOffline()">Slow down offline progress (doing more ticks but being more accurate)</button>
    <div id="progress">
      <div id="bar"></div>
    </div>
  </div>
  <div id="notificationarea">
  </div>
  <div id="main" style="display: none;">
    <div style="height: 32px;">You have ~f Stars.amount() ~ stars.~r ChallengeHeaderText.getText() ~~r FastResetText.getText() ~</div>
    <div ~style.display=Options.smallerHeader() ? 'none' : ''~>
      <div style="height: 56px;" ~style.display=ResetButtons.isResetButtonVisible('infinity') ? '' : 'none'~>
        <span ~style.display=InfinityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~f InfinityPrestigeLayer.starRequirementForInfinity() ~ stars to infinity.</span>
        <br ~style.display=InfinityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
        <span ~style.display=InfinityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i InfinityPrestigeLayer.infinityPoints() ~ infinity point~s InfinityPrestigeLayer.infinityPoints() ~ (~i InfinityPrestigeLayer.totalInfinityPoints() ~ total this eternity, ~t player.stats.timeSinceInfinity ~ in this infinity)</span>
        <button ~style.display=InfinityPrestigeLayer.canInfinity() ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.resetColors(), 'infinity')~ style="height: 48px;" onclick="InfinityPrestigeLayer.infinity(true, null)">Infinity: Gain ~i InfinityPrestigeLayer.infinityPointGain() ~ infinity point~s InfinityPrestigeLayer.infinityPointGain() ~ (~r InfinityPrestigeLayer.infinityPointGainRatioText() ~~i InfinityPrestigeLayer.infinityPoints() ~ → ~i InfinityPrestigeLayer.newInfinityPoints() ~~r InfinityPrestigeLayer.infinityPointNextText() ~)<br/>~t player.stats.timeSinceInfinity ~, <span ~style.display=InfinityPrestigeLayer.showLog('reset-buttons') ? 'none' : ''~>~f InfinityPrestigeLayer.currentIPPerSec() ~ IP/sec, ~f InfinityPrestigeLayer.peakIPPerSec() ~ peak IP/sec</span><span ~style.display=InfinityPrestigeLayer.showLog('reset-buttons') ? '' : 'none'~>~f InfinityPrestigeLayer.currentLogIPPerSecDisplay() ~ log IP/sec, ~f InfinityPrestigeLayer.peakLogIPPerSecDisplay() ~ peak log IP/sec</span></button>
      </div>
      <div style="height: 56px;" ~style.display=ResetButtons.isResetButtonVisible('eternity') ? '' : 'none'~>
        <span ~style.display=EternityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~f EternityPrestigeLayer.infinityPointRequirementForEternity() ~ total infinity points to eternity.</span>
        <br ~style.display=EternityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
        <span ~style.display=EternityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i EternityPrestigeLayer.eternityPoints() ~ eternity point~s EternityPrestigeLayer.eternityPoints() ~ (~i EternityPrestigeLayer.totalEternityPoints() ~ total this complexity, ~t player.stats.timeSinceEternity ~ in this eternity)</span>
        <button ~style.display=EternityPrestigeLayer.canEternity() ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.resetColors(), 'eternity')~ style="height: 48px;" onclick="EternityPrestigeLayer.eternity(true)">Eternity: Gain ~i EternityPrestigeLayer.eternityPointGain() ~ eternity point~s EternityPrestigeLayer.eternityPointGain() ~ (~r EternityPrestigeLayer.eternityPointGainRatioText() ~~i EternityPrestigeLayer.eternityPoints() ~ → ~i EternityPrestigeLayer.newEternityPoints() ~~r EternityPrestigeLayer.eternityPointNextText() ~)<br/>~t player.stats.timeSinceEternity ~, <span ~style.display=EternityPrestigeLayer.showLog('reset-buttons') ? 'none' : ''~>~f EternityPrestigeLayer.currentEPPerSec() ~ EP/sec, ~f EternityPrestigeLayer.peakEPPerSec() ~ peak EP/sec</span><span ~style.display=EternityPrestigeLayer.showLog('reset-buttons') ? '' : 'none'~>~f EternityPrestigeLayer.currentLogEPPerSecDisplay() ~ log EP/sec, ~f EternityPrestigeLayer.peakLogEPPerSecDisplay() ~ peak log EP/sec</span><span ~style.display=EternityChallenge.displayTiersCompletedOnEternity() ? '' : 'none'~>, +~i EternityChallenge.tiersCompletedOnEternity() ~ EC tier~s EternityChallenge.tiersCompletedOnEternity() ~ (~i EternityChallenge.getEternityChallengeCompletions() ~ → ~i EternityChallenge.getNextEternityChallengeCompletions() ~~r EternityChallenge.eternityChallengeCompletionsNextText() ~)</span></button>
      </div>
      <div style="height: 56px;" ~style.display=ResetButtons.isResetButtonVisible('complexity') ? '' : 'none'~>
        <span ~style.display=ComplexityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~r ComplexityPrestigeLayer.requirementForComplexity() ~ to complexity.</span>
        <br ~style.display=ComplexityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
        <span ~style.display=ComplexityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i ComplexityPrestigeLayer.complexityPoints() ~ complexity point~s ComplexityPrestigeLayer.complexityPoints() ~ (~i ComplexityPrestigeLayer.totalComplexityPoints() ~ total this finality, ~t player.stats.timeSinceComplexity ~ in this complexity)</span>
        <button ~style.display=ComplexityPrestigeLayer.canComplexity() ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.resetColors(), 'complexity')~ style="height: 48px;" onclick="ComplexityPrestigeLayer.complexity(true)">Complexity: Gain ~i ComplexityPrestigeLayer.complexityPointGain() ~ complexity point~s ComplexityPrestigeLayer.complexityPointGain() ~ (~r ComplexityPrestigeLayer.complexityPointGainRatioText() ~~i ComplexityPrestigeLayer.complexityPoints() ~ → ~i ComplexityPrestigeLayer.newComplexityPoints() ~~r ComplexityPrestigeLayer.complexityPointNextText() ~)<br/>~t player.stats.timeSinceComplexity ~, <span ~style.display=ComplexityPrestigeLayer.showLog('reset-buttons') ? 'none' : ''~>~f ComplexityPrestigeLayer.currentCPPerSec() ~ ℂP/sec, ~f ComplexityPrestigeLayer.peakCPPerSec() ~ peak ℂP/sec</span><span ~style.display=ComplexityPrestigeLayer.showLog('reset-buttons') ? '' : 'none'~>~f ComplexityPrestigeLayer.currentLogCPPerSecDisplay() ~ log ℂP/sec, ~f ComplexityPrestigeLayer.peakLogCPPerSecDisplay() ~ peak log ℂP/sec</span></button>
      </div>
      <div style="height: 56px;" ~style.display=ResetButtons.isResetButtonVisible('finality') ? '' : 'none'~>
        <span ~style.display=FinalityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~f FinalityPrestigeLayer.complexityPointRequirementForFinality() ~ total complexity points to finality.</span>
        <br ~style.display=FinalityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
        <span ~style.display=FinalityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i FinalityPrestigeLayer.finalityPoints() ~ finality point~s FinalityPrestigeLayer.finalityPoints() ~ (~i FinalityPrestigeLayer.totalFinalityPoints() ~ total) and ~i FinalityPrestigeLayer.finalityShards() ~ finality shard~s FinalityPrestigeLayer.finalityShards() ~ (~i FinalityPrestigeLayer.totalFinalityShards() ~ total); ~t player.stats.timeSinceFinality ~ in this finality</span>
        <button ~style.display=FinalityPrestigeLayer.canFinality() ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.resetColors(), 'finality')~ style="height: 48px;" onclick="FinalityPrestigeLayer.finality(true)">Finality: Gain ~i FinalityPrestigeLayer.finalityPointGain() ~ finality point~s FinalityPrestigeLayer.finalityPointGain() ~ (~r FinalityPrestigeLayer.finalityPointGainRatioText() ~~i FinalityPrestigeLayer.finalityPoints() ~ → ~i FinalityPrestigeLayer.newFinalityPoints() ~)<br/>~t player.stats.timeSinceFinality ~, +~i FinalityPrestigeLayer.finalityShardGain() ~ finality shard~s FinalityPrestigeLayer.finalityShardGain() ~ (~r FinalityPrestigeLayer.finalityShardGainRatioText() ~~i FinalityPrestigeLayer.finalityShards() ~ → ~i FinalityPrestigeLayer.newFinalityShards() ~)</button>
      </div>
    </div>
    <div ~style.display=Options.smallerHeader() ? '' : 'none'~>
      <button class="hoverbutton" ~style.display=ResetButtons.isResetButtonVisible('infinity') ? '' : 'none'~ ~style.background=InfinityPrestigeLayer.canInfinity() ? Colors.getButtonColorAltered(Options.resetColors(), 'infinity') : '#555555'~ onclick="InfinityPrestigeLayer.infinity(true, null)">
        <span ~style.display=InfinityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>Infinity: requires ~f InfinityPrestigeLayer.starRequirementForInfinity() ~ stars
          <span class="headertooltiptext" ~style.display=InfinityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i InfinityPrestigeLayer.infinityPoints() ~ infinity point~s InfinityPrestigeLayer.infinityPoints() ~ (~i InfinityPrestigeLayer.totalInfinityPoints() ~ total this eternity, ~t player.stats.timeSinceInfinity ~ in this infinity)</span>
        </span>
        <span ~style.display=InfinityPrestigeLayer.canInfinity() ? '' : 'none'~>Infinity: +~i InfinityPrestigeLayer.infinityPointGain() ~ IP
          <span class="headertooltiptext">~t player.stats.timeSinceInfinity ~; ~r InfinityPrestigeLayer.infinityPointGainRatioText() ~~i InfinityPrestigeLayer.infinityPoints() ~ → ~i InfinityPrestigeLayer.newInfinityPoints() ~~r InfinityPrestigeLayer.infinityPointNextText() ~; <span ~style.display=InfinityPrestigeLayer.showLog('reset-buttons') ? 'none' : ''~>~f InfinityPrestigeLayer.currentIPPerSec() ~ IP/sec, ~f InfinityPrestigeLayer.peakIPPerSec() ~ peak IP/sec</span><span ~style.display=InfinityPrestigeLayer.showLog('reset-buttons') ? '' : 'none'~>~f InfinityPrestigeLayer.currentLogIPPerSecDisplay() ~ log IP/sec, ~f InfinityPrestigeLayer.peakLogIPPerSecDisplay() ~ peak log IP/sec</span></span>
        </span>
      </button>
      <button class="hoverbutton" ~style.display=ResetButtons.isResetButtonVisible('eternity') ? '' : 'none'~ ~style.background=EternityPrestigeLayer.canEternity() ? Colors.getButtonColorAltered(Options.resetColors(), 'eternity') : '#555555'~ onclick="EternityPrestigeLayer.eternity(true)">
        <span ~style.display=EternityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>Eternity: requires ~f EternityPrestigeLayer.infinityPointRequirementForEternity() ~ IP
          <span class="headertooltiptext" ~style.display=EternityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i EternityPrestigeLayer.eternityPoints() ~ eternity point~s EternityPrestigeLayer.eternityPoints() ~ (~i EternityPrestigeLayer.totalEternityPoints() ~ total this complexity, ~t player.stats.timeSinceEternity ~ in this eternity)</span>
        </span>
        <span ~style.display=EternityPrestigeLayer.canEternity() ? '' : 'none'~>Eternity: +~i EternityPrestigeLayer.eternityPointGain() ~ EP
          <span class="headertooltiptext">~t player.stats.timeSinceEternity ~; ~r EternityPrestigeLayer.eternityPointGainRatioText() ~~i EternityPrestigeLayer.eternityPoints() ~ → ~i EternityPrestigeLayer.newEternityPoints() ~~r EternityPrestigeLayer.eternityPointNextText() ~; <span ~style.display=EternityPrestigeLayer.showLog('reset-buttons') ? 'none' : ''~>~f EternityPrestigeLayer.currentEPPerSec() ~ EP/sec, ~f EternityPrestigeLayer.peakEPPerSec() ~ peak EP/sec</span><span ~style.display=EternityPrestigeLayer.showLog('reset-buttons') ? '' : 'none'~>~f EternityPrestigeLayer.currentLogEPPerSecDisplay() ~ log EP/sec, ~f EternityPrestigeLayer.peakLogEPPerSecDisplay() ~ peak log EP/sec</span><span ~style.display=EternityChallenge.displayTiersCompletedOnEternity() ? '' : 'none'~>, +~i EternityChallenge.tiersCompletedOnEternity() ~ EC tier~s EternityChallenge.tiersCompletedOnEternity() ~ (~i EternityChallenge.getEternityChallengeCompletions() ~ → ~i EternityChallenge.getNextEternityChallengeCompletions() ~~r EternityChallenge.eternityChallengeCompletionsNextText() ~)</span></span>
      </button>
      <button class="hoverbutton" ~style.display=ResetButtons.isResetButtonVisible('complexity') ? '' : 'none'~ ~style.background=ComplexityPrestigeLayer.canComplexity() ? Colors.getButtonColorAltered(Options.resetColors(), 'complexity') : '#555555'~ onclick="ComplexityPrestigeLayer.complexity(true)">
        <span ~style.display=ComplexityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>Complexity: requires ~f ComplexityPrestigeLayer.eternityPointRequirementForComplexity() ~ EP
          <span class="headertooltiptext" ~style.display=ComplexityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i ComplexityPrestigeLayer.complexityPoints() ~ complexity point~s ComplexityPrestigeLayer.complexityPoints() ~ (~i ComplexityPrestigeLayer.totalComplexityPoints() ~ total this finality, ~t player.stats.timeSinceComplexity ~ in this complexity)</span>
        </span>
        <span ~style.display=ComplexityPrestigeLayer.canComplexity() ? '' : 'none'~>Complexity: +~i ComplexityPrestigeLayer.complexityPointGain() ~ ℂP
          <span class="headertooltiptext">~t player.stats.timeSinceComplexity ~; ~r ComplexityPrestigeLayer.complexityPointGainRatioText() ~~i ComplexityPrestigeLayer.complexityPoints() ~ → ~i ComplexityPrestigeLayer.newComplexityPoints() ~~r ComplexityPrestigeLayer.complexityPointNextText() ~; <span ~style.display=ComplexityPrestigeLayer.showLog('reset-buttons') ? 'none' : ''~>~f ComplexityPrestigeLayer.currentCPPerSec() ~ ℂP/sec, ~f ComplexityPrestigeLayer.peakCPPerSec() ~ peak ℂP/sec</span><span ~style.display=ComplexityPrestigeLayer.showLog('reset-buttons') ? '' : 'none'~>~f ComplexityPrestigeLayer.currentLogCPPerSecDisplay() ~ log ℂP/sec, ~f ComplexityPrestigeLayer.peakLogCPPerSecDisplay() ~ peak log ℂP/sec</span></span>
        </span>
      </button>
      <button class="hoverbutton" ~style.display=ResetButtons.isResetButtonVisible('finality') ? '' : 'none'~ ~style.background=FinalityPrestigeLayer.canFinality() ? Colors.getButtonColorAltered(Options.resetColors(), 'finality') : '#555555'~ onclick="FinalityPrestigeLayer.finality(true)">
        <span ~style.display=FinalityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>Finality: requires ~f FinalityPrestigeLayer.complexityPointRequirementForFinality() ~ ℂP
          <span class="headertooltiptext" ~style.display=FinalityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i FinalityPrestigeLayer.finalityPoints() ~ finality point~s FinalityPrestigeLayer.finalityPoints() ~ (~i FinalityPrestigeLayer.totalFinalityPoints() ~ total) and ~i FinalityPrestigeLayer.finalityShards() ~ finality shard~s FinalityPrestigeLayer.finalityShards() ~ (~i FinalityPrestigeLayer.totalFinalityShards() ~ total); ~t player.stats.timeSinceFinality ~ in this finality</span>
        </span>
        <span ~style.display=FinalityPrestigeLayer.canFinality() ? '' : 'none'~>Finality: +~i FinalityPrestigeLayer.finalityPointGain() ~ FP, +~i FinalityPrestigeLayer.finalityShardGain() ~ FS
          <span class="headertooltiptext">~t player.stats.timeSinceFinality ~; ~r FinalityPrestigeLayer.finalityPointGainRatioText() ~~i FinalityPrestigeLayer.finalityPoints() ~ → ~i FinalityPrestigeLayer.newFinalityPoints() ~ FP; ~r FinalityPrestigeLayer.finalityShardGainRatioText() ~~i FinalityPrestigeLayer.finalityShards() ~ → ~i FinalityPrestigeLayer.newFinalityShards() ~ FS</span>
        </span>
      </button>
    </div>
    <div style="height: 32px;" ~style.display=Goals.areAllGoalsCompleted() ? '' : 'none'~>You have won the game! Congratulations!</div>
    <div style="height: 32px;" ~style.display=player.options.news ? '' : 'none'~>~r News.getMessage() ~</div>
    <br/>
    <br/>
    <span ~style.display=Tabs.usingTabGroups() ? '' : 'none'~>
      <button ~style.display=Tabs.isTabGroupVisible('normal') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'normal')~ onclick="Tabs.setTabGroup('normal')">Normal</button>
      <button ~style.display=Tabs.isTabGroupVisible('infinity') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'infinity')~ onclick="Tabs.setTabGroup('infinity')">Infinity</button>
      <button ~style.display=Tabs.isTabGroupVisible('eternity') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'eternity')~ onclick="Tabs.setTabGroup('eternity')">Eternity</button>
      <button ~style.display=Tabs.isTabGroupVisible('complexity') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'complexity')~ onclick="Tabs.setTabGroup('complexity')">Complexity</button>
      <button ~style.display=Tabs.isTabGroupVisible('finality') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'finality')~ onclick="Tabs.setTabGroup('finality')">Finality</button>
      <button ~style.display=Tabs.isTabGroupVisible('miscellaneous') ? '' : 'none'~ onclick="Tabs.setTabGroup('miscellaneous')">Miscellaneous</button>
    </span>
    <br ~style.display=Tabs.usingTabGroups() ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(1) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('main') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'normal')~ onclick="Tabs.setTab('main')">Main</button>
      <button ~style.display=Tabs.isTabVisible('infinity') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'infinity')~ onclick="Tabs.setTab('infinity')">Infinity Generators</button>
      <button ~style.display=Tabs.isTabVisible('normal-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'infinity')~ onclick="Tabs.setTab('normal-challenges')">Normal Challenges</button>
      <button ~style.display=Tabs.isTabVisible('autobuyers') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'normal')~ onclick="Tabs.setTab('autobuyers')">Autobuyers</button>
      <button ~style.display=Tabs.isTabVisible('infinity-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'infinity')~ onclick="Tabs.setTab('infinity-challenges')">Infinity Challenges</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(1) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(2) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('goals') ? '' : 'none'~ ~style.background=Colors.getStringToColorCode('grey')~ onclick="Tabs.setTab('goals')">Goals</button>
      <button ~style.display=Tabs.isTabVisible('achievements') ? '' : 'none'~ ~style.background=Colors.getStringToColorCode('grey')~ onclick="Tabs.setTab('achievements')">Achievements</button>
      <button ~style.display=Tabs.isTabVisible('statistics') ? '' : 'none'~ ~style.background=Colors.getStringToColorCode('grey')~ onclick="Tabs.setTab('statistics')">Statistics</button>
      <button ~style.display=Tabs.isTabVisible('last-ten-runs') ? '' : 'none'~ ~style.background=Colors.getStringToColorCode('grey')~ onclick="Tabs.setTab('last-ten-runs')">Last ~r title(numbers[Stats.lastRunsToShow()]) ~ Run~s Stats.lastRunsToShow() ~</button>
      <button ~style.display=Tabs.isTabVisible('options') ? '' : 'none'~ ~style.background=Colors.getStringToColorCode('grey')~ ~class-name=Options.showExportNotification() ? 'redspan' : ''~ onclick="Tabs.setTab('options')">Options</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(2) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(3) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('eternity') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'eternity')~ onclick="Tabs.setTab('eternity')">Eternity Generators</button>
      <button ~style.display=Tabs.isTabVisible('eternity-milestones') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'eternity')~ onclick="Tabs.setTab('eternity-milestones')">Eternity Milestones</button>
      <button ~style.display=Tabs.isTabVisible('studies') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'studies')~ onclick="Tabs.setTab('studies')">Studies</button>
      <button ~style.display=Tabs.isTabVisible('eternity-producer') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'eternity-producer')~ onclick="Tabs.setTab('eternity-producer')">Eternity Producer</button>
      <button ~style.display=Tabs.isTabVisible('eternity-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'eternity')~ onclick="Tabs.setTab('eternity-challenges')">Eternity Challenges</button>
      <button ~style.display=Tabs.isTabVisible('chroma') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'chroma')~ onclick="Tabs.setTab('chroma')">Chroma</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(3) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(4) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('complexity') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('complexity')">Complexity Generators</button>
      <button ~style.display=Tabs.isTabVisible('complexity-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('complexity-challenges')">Complexity Challenges</button>
      <button ~style.display=Tabs.isTabVisible('complexity-achievements') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('complexity-achievements')">Complexity Achievements</button>
      <button ~style.display=Tabs.isTabVisible('powers') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), Powers.tabColors())~ onclick="Tabs.setTab('powers')">Powers</button>
      <button ~style.display=Tabs.isTabVisible('oracle') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('oracle')">Oracle</button>
      <button ~style.display=Tabs.isTabVisible('galaxies') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), Galaxy.tabColors())~ onclick="Tabs.setTab('galaxies')">Galaxies</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(4) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(5) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('finality') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'finality')~ onclick="Tabs.setTab('finality')">Finality Generators</button>
      <button ~style.display=Tabs.isTabVisible('finality-shards') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'finality')~ onclick="Tabs.setTab('finality-shards')">Finality Shards</button>
      <button ~style.display=Tabs.isTabVisible('finality-milestones') ? '' : 'none'~ ~style.background=Colors.getButtonColorAltered(Options.tabColors(), 'finality')~ onclick="Tabs.setTab('finality-milestones')">Finality Milestones</button>
    </span>
    <div ~style.display=Options.showExportNotification() ? '' : 'none'~ class="reddiv">
      <span>You have not exported your save for a long time. You might want to export regularly.</span>
      <br/>
      <span>This message can be disabled in the Options tab ("Show export reminder after X seconds"). <button onclick="Options.resetExportTime()">Remove this message for now</button></span>
    </div>
    <div ~style.display=ComplexityChallenge.anyLongTime() ? '' : 'none'~ class="reddiv">
      <span>You have been in ~r ComplexityChallenge.longTimeText() ~ for a long time.</span>
      <br/>
      <span>This message is here in case you accidentally disabled something and forgot to enable it again. <button onclick="ComplexityChallenge.removeLongTimeMessage()">Remove this message</button></span>
    </div>
    <br/>
    <br/>
    <tab ~style.display=Tabs.currentTab() === 'main' ? '' : 'none'~>
      <div ~style.display=Stars.canBuyThings() ? 'none' : ''~>
        <span>The ~r Stars.collapsedText() ~ collapsed due to an excess of stars.</span>
        <br/>
        <span>View stars and generators anyway: <input type="checkbox" ~!checked=Generators.viewWhenStarsAtLimit()~ ~!onchange=function() {Generators.setViewWhenStarsAtLimit(this.checked)}~></input></span>
      </div>
      <br ~style.display=(Stars.canBuyThings() || !Generators.viewWhenStarsAtLimit()) ? 'none' : ''~/>
      <div ~style.display=(Stars.canBuyThings() || Generators.viewWhenStarsAtLimit()) ? '' : 'none'~>
        <span>
          You have ~f Stars.amount() ~ stars. You are getting ~f Stars.perSecond() ~ stars per second.
          <br ~style.display=Options.isMaxAllModeBroad() ? '' : 'none'~/>
          <button ~class=(Options.isMaxAllModeBroad() ? true : MaxAll.anythingToBuy()) ? "" : "disabled"~ onclick="HotkeyMaxAll.trigger(true)">~r Options.isMaxAllModeBroad() ? 'Max all ' + Options.truncatedMaxAllMode() + ' (always displays as clickable)' : 'Max all' ~</button> <button ~style.display=Options.isMaxAllModeBroad() ? '' : 'none'~ ~class=MaxAll.anythingToBuy() ? "" : "disabled"~ onclick="MaxAll.maxAll()">Max all normal generators and boosts</button></span>
        <br/>
        <div ~style.display=Challenge.isThereChallengeText() ? '' : 'none'~>
          <span>~r Challenge.challengeText() ~</span>
        </div>
        <div ~style.display=EternityChallenge.isThereEternityChallengeText() ? '' : 'none'~>
          <span>~r EternityChallenge.eternityChallengeText() ~</span>
        </div>
        <div ~style.display=Boost.isVisible() ? '' : 'none'~>
          <span>
            You have ~i Boost.bought() ~ boost~s Boost.bought() ~, multiplying all ~r Generators.term() ~ by ~f Boost.multiplier() ~x (~f Boost.multiplierPer() ~x each).
            <button ~class=Boost.canBuy() ? "" : "disabled"~ onclick="Boost.buy()">Cost: ~f Boost.cost() ~</button> <button ~class=Boost.canBuy() ? "" : "disabled"~ onclick="Boost.buyMax()">Max</button> <button ~style.display=Autobuyer(9).hasAutobuyer() ? '' : 'none'~ onclick="Autobuyers.toggleSome(9)">Auto: ~r Autobuyer(9).isOn() ? "On" : "Off" ~ <span ~style.display=Autobuyer(9).isSlow() ? '' : 'none'~> (slow)</span></button>
          </span>
        </div>
        <div ~style.display=SpecialDivs.isDivVisible('boost-power') ? '' : 'none'~>
          <span>Your highest number of boosts this eternity is ~i Boost.highestBoughtThisEternity() ~.</span>
          <br/>
          <div ~style.display=Boost.isBoostPowerVisible() ? '' : 'none'~>
            <span>You have ~f Boost.boostPower() ~ boost power, increasing the per-boost multiplier by ~f Boost.boostPowerEffect() ~x.</span>
            <br/>
            <span>You are generating ~r formatPrecisely(Boost.boostPowerPerSecond()) ~ boost power per second (~r formatPrecisely(Boost.boostPowerPerBoost()) ~ per boost this eternity above ~i Boost.boostPowerStart() ~).</span>
          </div>
          <span ~style.display=Boost.isBoostPowerVisible() ? 'none' : ''~>You will start generating boost power for each boost this eternity above ~i Boost.boostPowerStart() ~ boosts.</span>
        </div>
        <div ~style.display=(Boost.isBestBoostPowerVisible() && PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~>
          <span>Your ~r Boost.bestBoostPowerDescription() ~ is ~f Boost.bestBoostPower() ~ (giving ~i Boost.extraTheoremsActualAndDisplay() ~ extra theorem~s Boost.extraTheoremsActualAndDisplay() ~, next at ~f Boost.nextExtraTheorem() ~).</span>
        </div>
        <span ~style.display=PrestigeLayerProgress.hasReached('prestige') ? '' : 'none'~>View all ~r Generators.term() ~ even if they would be otherwise invisible: <input type="checkbox" ~!checked=Options.rawViewAllGenerators('normal')~ ~!onchange=function() {Options.setRawViewAllGenerators('normal', this.checked)}~></input></span>
        <br/>
        <br/>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
          <loop i 1 8>
            <tr ~style.display=Generator(% @i %).isVisible() ? '' : 'none'~>
              <td>Generator ~o % @i % ~</td>
              <td>~f Generator(% @i %).amount() ~</td>
              <td>~f Generator(% @i %).perSecond() ~/s</td>
              <td>~f Generator(% @i %).multiplier() ~x</td>
              <td><button ~class=Generator(% @i %).canBuy() ? "" : "disabled"~ onclick="Generator(% @i %).buy()">Cost: ~i Generator(% @i %).cost() ~</button></td>
              <td><button ~class=Generator(% @i %).canBuy() ? "" : "disabled"~ onclick="Generator(% @i %).buyMax()">Max</button></td>
              <td><button ~style.display=Autobuyer(% @i %).hasAutobuyer() ? '' : 'none'~ onclick="Autobuyers.toggleSome(% @i %)">Auto: ~r Autobuyer(% @i %).isOn() ? "On" : "Off" ~<span ~style.display=Autobuyer(% @i %).isSlow() ? '' : 'none'~> (slow)</span></button></td>
            </tr>
          </loop>
        </table>
        <div style="min-height: 104px;" ~style.display=Sacrifice.isVisible() ? '' : 'none'~>
          <br/>
          <span>You have a ~f Sacrifice.sacrificeMultiplier() ~ sacrifice multiplier multiplying Generator ~o 8 ~ by its amount.</span>
          <br/>
          <span ~style.display=Sacrifice.canSacrifice() ? '' : 'none'~><button style="height: 48px;" onclick="Sacrifice.sacrifice(true)">Sacrifice: ~f Sacrifice.sacrificeMultiplier() ~ → ~f Sacrifice.newSacrificeMultiplier() ~<br/>(+~f Sacrifice.sacrificeMultiplierGain() ~, ~f Sacrifice.sacrificeMultiplierMultGain() ~x)</button></span>
          <span ~style.display=Sacrifice.canSacrifice() ? 'none' : ''~>You need ~r Sacrifice.sacrificeRequirementText() ~ to sacrifice.</span>
        </div>
        <div style="min-height: 104px;" ~style.display=Prestige.isVisible() ? '' : 'none'~>
          <br/>
          <span>You have ~f Prestige.prestigePower() ~ prestige power multiplying all ~r Generators.term() ~ by its amount.</span>
          <br/>
          <span ~style.display=Prestige.canPrestige() ? '' : 'none'~><button style="height: 48px;" onclick="Prestige.prestige(true)">Prestige: ~f Prestige.prestigePower() ~ → ~f Prestige.newPrestigePower() ~<br/>(+~f Prestige.prestigePowerGain() ~, ~f Prestige.prestigePowerMultGain() ~x)</button></span>
          <span ~style.display=Prestige.canPrestige() ? 'none' : ''~>You need ~r Prestige.prestigeRequirementText() ~ to prestige.</span>
        </div>
        <br ~style.display=SpecialDivs.isDivVisible('softcap') ? '' : 'none'~/>
        <span ~style.display=SpecialDivs.isDivVisible('softcap') ? '' : 'none'~>~r Generators.term(true, true) ~ multipliers are reduced above ~f Generators.nerfValue() ~x (the multiplier softcap).</span>
        <br ~style.display=Generators.areAnyMultipliersNerfed() ? '' : 'none'~/>
        <div ~style.display=Generators.areAnyMultipliersNerfed() ? '' : 'none'~>
          Given a multiplier x, let y be log(x, ~f Generators.nerfValue() ~). <span class="helpspan">(?)<span class="tooltiptext">This is the log of x with base ~f Generators.nerfValue() ~ (or equivalently log(x) / log(~f Generators.nerfValue() ~)), so if x is exactly ~f Generators.nerfValue() ~ then y is ~i 1 ~, and as x increases beyond that, y increases also.</span></span> x is reduced to ~f Generators.nerfValue() ~^(y^(y^~r formatPrecisely(Generators.nerfExponent) ~)). <span class="helpspan">(?)<span class="tooltiptext">Since y starts close to 1, y^(y^~r formatPrecisely(Generators.nerfExponent) ~) is initially close to y and the multiplier reduction is initially small, but as y increases the reduction gets larger. Of course, if a multiplier x is below ~f Generators.nerfValue() ~, it will not get reduced at all.</span></span>
        </div>
        <br ~style.display=SpecialDivs.isDivVisible('hardcap') ? '' : 'none'~/>
        <span ~style.display=SpecialDivs.isDivVisible('hardcap') ? '' : 'none'~>It is impossible to get more than ~f MultiverseCollapse.stars() ~ stars.</span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'infinity' ? '' : 'none'~>
      <span>You have ~i InfinityPoints.amount() ~ infinity point~s InfinityPoints.amount() ~ (IP).
        <button ~class=InfinityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="InfinityMaxAll.maxAll()">Max all</button>
        <button ~class=InfinityMaxAll.anyUpgradesToBuy() ? "" : "disabled"~ onclick="InfinityMaxAll.maxUpgrades()">Max upgrades</button>
        <button ~class=InfinityMaxAll.anyGeneratorsToBuy() ? "" : "disabled"~ onclick="InfinityMaxAll.maxGenerators()">Max generators</button>
      </span>
      <br/>
      <span>You have produced ~i InfinityPoints.totalIPProducedThisEternity() ~ infinity point~s InfinityPoints.totalIPProducedThisEternity() ~ this eternity, multiplying all ~r Generators.term() ~ by ~f InfinityPoints.multiplier() ~.</span>
      <br/>
      <span>You have ~i Infinities.amount() ~ infinit~y Infinities.amount() ~, multiplying all infinity generators (IGs) by ~q Infinities.infinityGeneratorMultiplier() ~.</span>
      <br/>
      <span ~style.display=InfinityPrestigeLayer.canInfinityBeBroken() ? '' : 'none'~><button style="height: 48px;" onclick="InfinityPrestigeLayer.toggleBreakInfinity()">~r InfinityPrestigeLayer.breakInfinityButtonText() ~</button></span>
      <span ~style.display=InfinityPrestigeLayer.canInfinityBeBroken() ? 'none' : ''~>You need to complete all the normal challenges to be able to break infinity.</span>
      <br ~style.display=(InfinityPrestigeLayer.canInfinityBeBroken() && !SpecialTabs.isTabVisible('infinity-challenges')) ? '' : 'none'~/>
      <span ~style.display=(InfinityPrestigeLayer.canInfinityBeBroken() && !SpecialTabs.isTabVisible('infinity-challenges')) ? '' : 'none'~>Breaking infinity for the first time will also let you view the Infinity Challenges tab.</span>
      <br/>
      <span>You have ~f InfinityStars.amount() ~ infinity stars, multiplying all ~r Generators.term() ~ by their amount^~f InfinityStars.exponent() ~ = ~f InfinityStars.multiplier() ~.</span>
      <br/>
      <span>You are getting ~f InfinityStars.perSecond() ~ infinity stars per second.</span>
      <br/>
      <span>View all infinity generators even if they would be otherwise invisible: <input type="checkbox" ~!checked=Options.rawViewAllGenerators('infinity')~ ~!onchange=function() {Options.setRawViewAllGenerators('infinity', this.checked)}~></input></span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <th colspan="5">Infinity Upgrades:</th>
        <tr>
          <td>Increase the base multiplier per boost:</td>
          <td><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? 'none' : ''~>~f InfinityUpgrade(1).effect() ~ → ~f InfinityUpgrade(1).nextEffect() ~</span><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? '' : 'none'~>~f InfinityUpgrade(1).effect() ~ (maxed)</span></td>
          <td><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(1).buy()">Cost: ~i InfinityUpgrade(1).cost() ~ IP</button></span></td>
          <td><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(1).buyMax()">Max</button></span></td>
          <td><span ~style.display=InfinityAutobuyer(9).hasInfinityAutobuyer() ? '' : 'none'~><button onclick="InfinityAutobuyer(9).toggle()">Auto: ~r InfinityAutobuyer(9).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
        <tr>
          <td>Increase the power of infinity stars:</td>
          <td><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f InfinityUpgrade(2).effect() ~ → ~f InfinityUpgrade(2).nextEffect() ~</span><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f InfinityUpgrade(2).effect() ~ (maxed)</span></td>
          <td><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(2).buy()">Cost: ~i InfinityUpgrade(2).cost() ~ IP</button></span></td>
          <td><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(2).buyMax()">Max</button></span></td>
          <td><span ~style.display=InfinityAutobuyer(10).hasInfinityAutobuyer() ? '' : 'none'~><button onclick="InfinityAutobuyer(10).toggle()">Auto: ~r InfinityAutobuyer(10).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
      </table>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <loop i 1 8>
          <tr ~style.display=InfinityGenerator(% @i %).isVisible() ? '' : 'none'~>
            <td>Infinity Generator ~o % @i % ~</td>
            <td>~f InfinityGenerator(% @i %).amount() ~</td>
            <td>~f InfinityGenerator(% @i %).perSecond() ~/s</td>
            <td>~f InfinityGenerator(% @i %).multiplier() ~x</td>
            <td><button ~class=InfinityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(% @i %).buy()">Cost: ~i InfinityGenerator(% @i %).cost() ~ IP</button></td>
            <td><button ~class=InfinityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(% @i %).buyMax()">Max</button></td>
            <td><button ~style.display=InfinityAutobuyer(% @i %).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(% @i %).toggle()">Auto: ~r InfinityAutobuyer(% @i %).isOn() ? "On" : "Off" ~</button></td>
          </tr>
        </loop>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'normal-challenges' ? '' : 'none'~>
      <span>You have completed ~i Challenge.numberOfChallengesCompleted() ~ normal challenge~s Challenge.numberOfChallengesCompleted() ~, multiplying all ~r Generators.term() ~ by ~f Challenge.multiplier() ~.</span>
      <br/>
      <span><button onclick="Challenge.toggleRestartOnCompletion()">Restart normal challenges on completion: ~r Challenge.restartOnCompletion() ? "On" : "Off" ~</button></span>
      <br/>
      <br/>
      <span>To complete a normal challenge, infinity while in the normal challenge.</span>
      <br/>
      <span style="display: inline-block; height: 25px;">~r Challenge.isSomeChallengeRunning() ? '' : '\u200b' ~<button ~style.display=Challenge.isSomeChallengeRunning() ? '' : 'none'~ onclick="Challenge.exitChallenge()">Exit Normal Challenge ~o Challenge.currentChallenge() ~ (~r Challenge.exitChallengeHeaderButtonText() ~)</button> <button ~style.display=Challenge.isSomeChallengeRunning() ? '' : 'none'~ onclick="Challenge.restartChallenge()">Reset it (exit and start again)</button></span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(1)~>
              <span>Normal Challenge ~o 1 ~</span>
              <br/>
              <span>Generator ~o 1 ~ multiplier is raised ^~i 4 ~. All other ~r Generators.term(true) ~ multipliers are always ~i 1 ~x.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(1) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(1) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(1)">~r Challenge.challengeButtonText(1) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 1 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(2)~>
              <span>Normal Challenge ~o 2 ~</span>
              <br/>
              <span>There's a multiplier on all ~r Generators.term() ~ increasing linearly from ~i 0 ~ to ~i 1 ~ over ~ti 256 ~. Every time you buy a generator or boost, or sacrifice or prestige, this multiplier resets to ~i 0 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(2) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(2) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(2)">~r Challenge.challengeButtonText(2) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 2 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(3)~>
              <span>Normal Challenge ~o 3 ~</span>
              <br/>
              <span>There's a multiplier on Generator ~o 1 ~, starting at ~r formatPrecisely(1 / 256) ~ and doubling every ~ti 256 ~. Every time you prestige, this multiplier resets to ~r formatPrecisely(1 / 256) ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(3) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(3) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(3)">~r Challenge.challengeButtonText(3) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 3 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(4)~>
              <span>Normal Challenge ~o 4 ~</span>
              <br/>
              <span>Every time you buy a ~r Generators.term(true) ~, the amounts of all lower ~r Generators.term() ~ are reset, like a sacrifice without the benefit.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(4) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(4) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(4)">~r Challenge.challengeButtonText(4) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 4 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(5)~>
              <span>Normal Challenge ~o 5 ~</span>
              <br/>
              <span>All ~r Generators.term(true) ~ cost increases are raised ^~i 2 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(5) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(5) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(5)">~r Challenge.challengeButtonText(5) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 5 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(6)~>
              <span>Normal Challenge ~o 6 ~</span>
              <br/>
              <span>There are only 6 ~r Generators.term() ~. (Generator ~o 7 ~ and Generator ~o 8 ~ don't exist.)</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(6) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(6) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(6)">~r Challenge.challengeButtonText(6) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 6 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(7)~>
              <span>Normal Challenge ~o 7 ~</span>
              <br/>
              <span>You can only buy ~i 343 ~ total ~r Generators.term() ~ and boosts throughout this challenge. This count does not reset on prestige.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(7) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(7) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(7)">~r Challenge.challengeButtonText(7) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 7 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(8)~>
              <span>Normal Challenge ~o 8 ~</span>
              <br/>
              <span>You can't buy boosts, the per-boost multiplier is ~i 1 ~x, and prestige power is raised ^~f 0.5 ~, but all ~r Generators.term() ~ (including Generator ~o 8 ~) are multiplied by your amount of Generator ~o 8 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(8) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(8) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(8)">~r Challenge.challengeButtonText(8) ~</button></span>
              <br/>
              <span>Reward: Faster Generator ~o 8 ~ Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(9)~>
              <span>Normal Challenge ~o 9 ~</span>
              <br/>
              <span>You can't buy boosts and the per-boost multiplier is ~i 1 ~x.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(9) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(9) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(9)">~r Challenge.challengeButtonText(9) ~</button></span>
              <br/>
              <span>Reward: Faster Boost Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(10)~>
              <span>Normal Challenge ~o 10 ~</span>
              <br/>
              <span>You can't buy boosts or more than one of each ~r Generators.term(true) ~, and you can't prestige. You can sacrifice multiple times at the same point and the sacrifice bonuses multiply, but sacrifice resets everything that prestige resets.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(10) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(10) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(10)">~r Challenge.challengeButtonText(10) ~</button></span>
              <br/>
              <span>Reward: Sacrifice Autobuyer</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(11)~>
              <span>Normal Challenge ~o 11 ~</span>
              <br/>
              <span>Prestige power is raised ^~f 0.5 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(11) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(11) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(11)">~r Challenge.challengeButtonText(11) ~</button></span>
              <br/>
              <span>Reward: Prestige Autobuyer</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(12)~>
              <span>Normal Challenge ~o 12 ~</span>
              <br/>
              <span>Infinity generators are disabled.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(12) ~</span>
              <br/>
              <span><button ~class=Challenge.canStartOrExitChallenge(12) ? '' : 'disabled'~ onclick="Challenge.startOrExitChallenge(12)">~r Challenge.challengeButtonText(12) ~</button></span>
              <br/>
              <span>Reward: Infinity Autobuyer</span>
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'autobuyers' ? '' : 'none'~>
      <span>You have ~i Autobuyers.numberOfAutobuyers() ~ autobuyer~s Autobuyers.numberOfAutobuyers() ~.</span>
      <br ~style.display=Autobuyers.isLockedResetAutobuyer(15) ? '' : 'none'~/>
      <span ~style.display=Autobuyers.isLockedResetAutobuyer(15) ? '' : 'none'~>The complexity autobuyer is off when unlocked unless you explicitly pre-set it to be on.</span>
      <br/>
      <span>Turn newly unlocked autobuyers on when unlocked: <input type="checkbox" ~!checked=Autobuyers.areNewlyUnlockedAutobuyersOn()~ ~!onchange=function() {Autobuyers.setAreNewlyUnlockedAutobuyersOn(this.checked)}~></input></span>
      <div ~style.display=Autobuyers.anyLockedResetAutobuyers() ? '' : 'none'~>
        <span>Pre-set locked reset autobuyers (this overrides the above setting):</span>
        <br/>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(12) ? '' : 'none'~>Infinity: <input type="checkbox" class="autobuyer-checkbox-12" ~!checked=Autobuyer(12).isOn()~ ~!onchange=function() {Autobuyer(12).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(13) ? '' : 'none'~>Eternity: <input type="checkbox" class="autobuyer-checkbox-13" ~!checked=Autobuyer(13).isOn()~ ~!onchange=function() {Autobuyer(13).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(14) ? '' : 'none'~>Permanence: <input type="checkbox" class="autobuyer-checkbox-14" ~!checked=Autobuyer(14).isOn()~ ~!onchange=function() {Autobuyer(14).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(15) ? '' : 'none'~>Complexity: <input type="checkbox" class="autobuyer-checkbox-15" ~!checked=Autobuyer(15).isOn()~ ~!onchange=function() {Autobuyer(15).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(16) ? '' : 'none'~>Finality: <input type="checkbox" class="autobuyer-checkbox-16" ~!checked=Autobuyer(16).isOn()~ ~!onchange=function() {Autobuyer(16).setIsOn(this.checked)}~></input></span>
      </div>
      <br/>
      <div ~style.display=Autobuyers.areAnyAutobuyersSlow() ? '' : 'none'~>
        <span>Slow autobuyers will trigger in ~t Autobuyers.timeUntilNextSlowTrigger() ~.</span>
        <br/>
      </div>
      <div ~style.display=Autobuyers.areAnyAutobuyersFast() ? '' : 'none'~>
        <span>Fast autobuyers <span ~style.display=Autobuyers.doFastAutobuyersAlwaysTrigger() ? '' : 'none'~>trigger every tick.</span><span ~style.display=Autobuyers.doFastAutobuyersAlwaysTrigger() ? 'none' : ''~>will trigger in ~t Autobuyers.timeUntilNextFastTrigger() ~.</span></span>
        <br/>
      </div>
      <div ~style.display=Autobuyers.areThereAnyAutobuyers() ? '' : 'none'~>
        <span>Make autobuyers trigger at most every X seconds (~i 0 ~ to always trigger): <input type="text" class="autobuyers-timer-length" ~!value=NotationOptions.format('autobuyers-timer-length')~ ~!onchange=function() {Autobuyers.setAutobuyersTimerLength(NotationOptions.read('autobuyers-timer-length', this.value))}~></input></span>
        <br/>
      </div>
      <div ~style.display=(Autobuyers.areThereAnyAutobuyers() && PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~>
        <span>Automatically turn all autobuyers off when entering normal challenges: <input type="checkbox" ~!checked=Autobuyers.disableWhenStartingChallenge()~ ~!onchange=function() {Autobuyers.setDisableWhenStartingChallenge(this.checked)}~></input><span ~style.display=SpecialTabs.isTabVisible('infinity-challenges') ? '' : 'none'~> when entering infinity challenges: <input type="checkbox" ~!checked=Autobuyers.disableWhenStartingInfinityChallenge()~ ~!onchange=function() {Autobuyers.setDisableWhenStartingInfinityChallenge(this.checked)}~></input></span></span>
        <br/>
      </div>
      <span>You can toggle an autobuyer by pressing T + the corresponding hotkey.</span>
      <br/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Autobuyers options on this tab only apply to autobuyers on this tab.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span><button onclick="Autobuyers.setAll(true)">Turn all autobuyers on</button> <button onclick="Autobuyers.setAll(false)">Turn all autobuyers off</button> <button onclick="Autobuyers.turnAllOnOrOff()">Turn all autobuyers on/off</button> <button onclick="Autobuyers.toggleAll()">Toggle all autobuyers</button></span>
      <div ~style.display=(Autobuyers.anyNonGeneratorAndBoostDisplay() || (Autobuyers.areAnyAutobuyersSlow() && Autobuyers.areAnyAutobuyersFast())) ? '' : 'none'~>
        <span><button onclick="Autobuyers.toggleShowGeneratorAndBoost()" ~style.display=Autobuyers.anyNonGeneratorAndBoostDisplay() ? '' : 'none'~>Show generator and boost autobuyers: ~r Autobuyers.showGeneratorAndBoost() ? 'On' : 'Off' ~</button> <button onclick="Autobuyers.synchronize()" ~style.display=(Autobuyers.areAnyAutobuyersSlow() && Autobuyers.areAnyAutobuyersFast()) ? '' : 'none'~>Synchronize slow and fast autobuyers</button></span>
      </div>
      <span ~style.display=Explanations.isVisible('autobuyers', 'any') ? '' : 'none' ~>Explanations: <button ~style.display=Explanations.isVisible('autobuyers', 'basic') ? '' : 'none'~ onclick="Explanations.showOrHide('autobuyers', 'basic')">Autobuyers with text inputs: ~r Explanations.isShown('autobuyers', 'basic') ? 'Shown' : 'Hidden' ~</button> <button ~style.display=Explanations.isVisible('autobuyers', 'per-sec') ? '' : 'none'~ onclick="Explanations.showOrHide('autobuyers', 'per-sec')">Autobuyer modes with /sec: ~r Explanations.isShown('autobuyers', 'per-sec') ? 'Shown' : 'Hidden' ~</button></span>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Explanations.isShown('autobuyers', 'basic') ? '' : 'none'~>
        <span>Autobuyers for some type of reset, such as the sacrifice, prestige, and infinity autobuyers, each have a text input, and have a mode which describes how that input is used. That text input is always converted to a number, which is then (for time-based modes) considered as a number of seconds, or (for other modes) just used as a number.</span>
        <br/>
        <br/>
        <span>For example, one important time-based mode is just "Time", which makes the autobuyer trigger when it's been at least the input number of seconds since the last type of reset the autobuyer does (whether that was due to the autobuyer or manual). For example, if you prestige, and the prestige autobuyer is on, has mode "Time", and has text input ~i 60 ~, it will, if possible, prestige ~ti 60 ~ later. (Of course, if you're not manually prestiging at all, this will cause the prestige autobuyer to prestige every ~ti 60 ~.) Some autobuyers have some "Time since" modes which, instead of waiting some number of seconds after a reset for the autobuyer to trigger, wait some number of seconds after some other event.</span>
        <br/>
        <br/>
        <span>An example of a non-time-based mode is the "Multiplier" mode of the prestige autobuyer. This mode will prestige every time you can get at least the input value as an additional multiplier from prestiging. For example, if the prestige autobuyer is on, has mode "Multiplier", and has text input ~i 5 ~, and you currently have ~i 1 ~ prestige power, it will prestige first at ~i 5 ~ prestige power, then at ~i 25 ~ prestige power, then at ~i 125 ~ prestige power, and so on. (If progress is fast enough, it may prestige for slightly more prestige power than this.)</span>
        <br/>
        <br/>
      </div>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Explanations.isShown('autobuyers', 'per-sec') ? '' : 'none'~>
        <span ~style.display=(InfinityPrestigeLayer.canInfinityBeBroken() || PrestigeLayerProgress.hasReached('eternity')) ? 'none' : ''~>This explanation will become a lot more useful once you break infinity and can get more than ~i 2 ~ IP from a single infinity. For now, you can just set your infinity autobuyer to mode "Amount" and put ~i 2 ~ in its text input. If you want to read this explanation even though it's not useful yet, though, you can.</span>
        <br ~style.display=(InfinityPrestigeLayer.canInfinityBeBroken() || PrestigeLayerProgress.hasReached('eternity')) ? 'none' : ''~/>
        <span>I know this explanation is fairly long and takes a while to get to the point, but I think it's useful for understanding the autobuyer modes with /sec, which are some of the most useful autobuyer modes in the game. Hopefully it's thorough enough to not be confusing.</span>
        <br/>
        <br/>
        <span>Let's start with gain/sec. This is shown, for example, on the infinity button as IP/sec, but gain/sec is a more general term that we'll be able to apply to other things later in the game. Gain/sec is simply the value of something that you'd currently gain from reset, divided by the number of seconds it's been since you reset. For example, if you would get ~i 300 ~ additional IP from infinitying and it's been ~ti 60 ~ since you last infinitied, then your IP/sec (gain/sec for infinity) would be ~i 300 ~ / ~i 60 ~ = ~i 5 ~.</span>
        <br/>
        <br/>
        <span>Early on in the game (just after breaking infinity), gain/sec will go up at the start of an infinity, then at some point it will stop going up and start going down. The highest value it reaches is called peak/sec. For example, suppose you can gain ~i 10 ~ IP when it's been ~ti 30 ~ since the start of the current infinity, you can gain ~i 20 ~ IP after ~ti 45 ~ (~ti 15 ~ later), and you can gain ~i 25 ~ IP after ~ti 60 ~. Gain/sec is then ~i 30 ~ / ~i 10 ~ = ~f 1 / 3 ~ after ~ti 30 ~, ~i 20 ~ / ~i 45 ~ = ~f 4 / 9 ~ after ~ti 45 ~, and ~i 25 ~ / ~i 60 ~ = ~f 5 / 12 ~ after ~ti 60 ~; of these times, the highest value for gain/sec was ~f 4 / 9 ~, after ~ti 45 ~. (Of course, without knowing the IP gain from infinity at other times, we don't actually know peak/sec, but hopefully this example clarifies the content). Peak/sec sometimes also refers to the time at which gain/sec reaches this highest value. For example, peak/sec in the above example was ~ti 45 ~ after infinity.</span>
        <br/>
        <br/>
        <span>Note that there can be cases where something seems to be peak/sec, but actually it is not. For example, suppose you can gain ~i 10 ~ IP after ~ti 30 ~, ~i 15 ~ IP after ~ti 40 ~, ~i 18 ~ IP after ~ti 50 ~, ~i 24 ~ IP after ~ti 60 ~, and ~i 27 ~ IP after ~ti 70 ~. At these times, gain/sec is ~f 1 / 3 ~, ~f 3 / 8 ~, ~f 9 / 25 ~, ~f 2 / 5 ~, and ~f 27 / 70 ~, respectively. After ~ti 50 ~, it seems like a peak/sec of ~f 3 / 8 ~ was reached after ~ti 40 ~. However, after ~ti 70 ~, it turns out that ~ti 60 ~ had a higher gain/sec than ~ti 40 ~, so ~f 2 / 5 ~ is the new peak/sec.</span>
        <br/>
        <br/>
        <span>Now it's possible to actually discuss some autobuyer modes. The mode "Fraction of peak/sec" does a reset when the ratio (gain/sec) / (peak/sec) (i.e., the ratio of current gain/sec to its peak) is less than or equal to (note: not greater than) the autobuyer setting. While gain/sec is going up, this ratio will be ~i 1 ~, because gain/sec and peak/sec are equal, but when gain/sec starts going down, the ratio will go down from ~i 1 ~. For example, in the "~i 10 ~ IP after ~ti 30 ~, ~i 20 ~ IP after ~ti 45 ~, ~i 25 ~ IP after ~ti 60 ~" example, after ~ti 60 ~, gain/sec is ~f 5 / 12 ~ and peak/sec is ~f 4 / 9 ~, meaning that (gain/sec)/(peak/sec) is ~f 5 / 12 ~ / ~f 4 / 9 ~ = ~f 15 / 16 ~.</span>
        <br/>
        <br/>
        <span>The mode "Time past peak/sec" is somewhat easier to understand; it just waits the input number of seconds after the peak/sec time, and then does a reset. For example, in the "~i 10 ~ IP after ~ti 30 ~, ~i 20 ~ IP after ~ti 45 ~, ~i 25 ~ IP after ~ti 60 ~" example, after ~ti 60 ~, time since peak/sec is ~ti 15 ~; if the infinity autobuyer mode is "Time past peak/sec" and the input setting is ~i 15 ~, this is thus when it will infinity. For this mode, similarly to other time modes, the autobuyer will also reset if it's been greater than that many seconds since peak/sec (for example, if the autobuyer was turned on halfway through an infinity).</span>
        <br/>
        <br/>
        <span>Note that if you use mode "Fraction of peak/sec" and have the input set too close to ~i 1 ~, or you use mode "Time since peak/sec" and have the input set too close to ~i 0 ~, you might end up resetting in the "cases where something seems to be peak/sec, but actually it is not" described above, which might not be optimal.</span>
        <br/>
        <br/>
        <span>After you get enough progress, you'll notice that gain/sec never stops going up. At first it will go up and down but will keep reaching new maxima, repeating the "cases where something seems to be peak/sec, but actually it is not" process described above over and over in the same infinity. Later, it will just go up basically all the time, without going down significantly in between. In any case, this can stop your autobuyer from ever triggering if it uses "Fraction of peak/sec" mode or "Time past peak/sec" mode.</span>
        <br/>
        <br/>
        <span>In this case, you can use a "peak log/sec" mode. The way "peak log/sec" is fairly similar to "peak/sec"; there's something called "log/sec" which can vary over an infinity, "peak log/sec" is the maximum value which log/sec reaches, or the time at which it's reached, the mode "Fraction of peak log/sec" makes the autobuyer trigger when log/sec reaches or goes below a certain fraction of peak log/sec, and the mode "Time past peak log/sec" makes the autobuyer trigger a certain amount of time after peak log/sec. So the only real difference is the use of "log/sec" rather than "gain/sec", which means log/sec has to be explained.</span>
        <br/>
        <br/>
        <span>Log/sec is based on the idea of measuring progress in terms of the logarithm (base ~i 10 ~, unless you use a different notation base) of your total (including spent) amount of something. For example, if so far you've gotten ~i 10 ~ IP (some of which you may have spent), and you can do an infinity to get ~i 20 ~ more IP, this will increase your total IP from ~i 10 ~ to ~i 30 ~, and increase the logarithm of total IP from ~f 1 ~ to ~f Math.log10(30) ~, which is an increase of ~f Math.log10(3) ~. (The reason to use total IP rather than current IP is so that buying things with IP doesn't drastically impact stuff based on log.) Log/sec is simply increase in log from reset divided by number of seconds it's been since reset. For example, in the above example, if you have ~i 10 ~ total IP and can do an infinity to get ~i 20 ~ more IP, and that infinity's taken ~ti 60 ~ so far, log/sec is ~f Math.log10(3) ~ / ~i 60 ~ = ~f Math.log10(3) / 60 ~. (It's typical for log/sec to be fairly small, as it is in this example; in some cases it might be small enough to display as ~f 0 ~, but don't worry, the actual non-zero value is still being used by the autobuyer.) Log/sec, unlike gain/sec, almost always starts going down after a long enough time.</span>
        <br/>
        <br/>
        <span>I hope this explanation was helpful. These autobuyer modes are by no means necessary, but they often are the most generally useful and make it so you don't need to constantly adjust autobuyers, so it's nice to know how to use them.</span>
        <br/>
        <br/>
      </div>
      <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
        <tr ~style.display=Autobuyers.showGeneratorAndBoost() ? '' : 'none'~>
          <td>
            <div class="autobuyerdiv" ~style.display=(Autobuyer(1).hasAutobuyer() || !Autobuyer(1).hasReachedDisplayThreshold()) ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(1).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 1 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-1" ~!checked=Autobuyer(1).isOn()~ ~!onchange=function() {Autobuyer(1).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(1).mode()~ ~!onchange=function() {Autobuyer(1).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button ~style.display=Autobuyer(1).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(1).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(1).unlockSlow()">
              Unlock Slow Generator ~o 1 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(1).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(2).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(2).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 2 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-2" ~!checked=Autobuyer(2).isOn()~ ~!onchange=function() {Autobuyer(2).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(2).mode()~ ~!onchange=function() {Autobuyer(2).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(2).hasAutobuyer() || !Autobuyer(2).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(2).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(2).unlockSlow()">
              Unlock Slow Generator ~o 2 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(2).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(3).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(3).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 3 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-3" ~!checked=Autobuyer(3).isOn()~ ~!onchange=function() {Autobuyer(3).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(3).mode()~ ~!onchange=function() {Autobuyer(3).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(3).hasAutobuyer() || !Autobuyer(3).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(3).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(3).unlockSlow()">
              Unlock Slow Generator ~o 3 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(3).unlockSlowCost() ~ stars
            </button>
          </td>
        </tr>
        <tr ~style.display=Autobuyers.showGeneratorAndBoost() ? '' : 'none'~>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(4).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(4).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 4 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-4" ~!checked=Autobuyer(4).isOn()~ ~!onchange=function() {Autobuyer(4).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(4).mode()~ ~!onchange=function() {Autobuyer(4).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(4).hasAutobuyer() || !Autobuyer(4).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(4).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(4).unlockSlow()">
              Unlock Slow Generator ~o 4 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(4).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(5).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(5).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 5 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-5" ~!checked=Autobuyer(5).isOn()~ ~!onchange=function() {Autobuyer(5).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(5).mode()~ ~!onchange=function() {Autobuyer(5).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(5).hasAutobuyer() || !Autobuyer(5).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(5).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(5).unlockSlow()">
              Unlock Slow Generator ~o 5 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(5).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(6).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(6).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 6 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-6" ~!checked=Autobuyer(6).isOn()~ ~!onchange=function() {Autobuyer(6).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(6).mode()~ ~!onchange=function() {Autobuyer(6).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(6).hasAutobuyer() || !Autobuyer(6).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(6).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(6).unlockSlow()">
              Unlock Slow Generator ~o 6 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(6).unlockSlowCost() ~ stars
            </button>
          </td>
        </tr>
        <tr ~style.display=Autobuyers.showGeneratorAndBoost() ? '' : 'none'~>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(7).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(7).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 7 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-7" ~!checked=Autobuyer(7).isOn()~ ~!onchange=function() {Autobuyer(7).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(7).mode()~ ~!onchange=function() {Autobuyer(7).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(7).hasAutobuyer() || !Autobuyer(7).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(7).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(7).unlockSlow()">
              Unlock Slow Generator ~o 7 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(7).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(8).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(8).isSlow() ? '' : 'none'~>Slow </span>Generator ~o 8 ~ Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-8" ~!checked=Autobuyer(8).isOn()~ ~!onchange=function() {Autobuyer(8).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(8).mode()~ ~!onchange=function() {Autobuyer(8).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(8).hasAutobuyer() || !Autobuyer(8).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(8).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(8).unlockSlow()">
              Unlock Slow Generator ~o 8 ~ Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(8).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(9).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(9).isSlow() ? '' : 'none'~>Slow </span>Boost Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-9" ~!checked=Autobuyer(9).isOn()~ ~!onchange=function() {Autobuyer(9).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(9).mode()~ ~!onchange=function() {Autobuyer(9).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=(Autobuyer(9).hasAutobuyer() || !Autobuyer(9).hasReachedDisplayThreshold()) ? 'none' : ''~ ~class=Autobuyer(9).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(9).unlockSlow()">
              Unlock Slow Boost Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(9).unlockSlowCost() ~ stars
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <div class="tallautobuyerdiv" ~style.display=Autobuyer(10).hasAutobuyer() ? '' : 'none'~>
              <span>Sacrifice Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-10" ~!checked=Autobuyer(10).isOn()~ ~!onchange=function() {Autobuyer(10).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(10).mode()~ ~!onchange=function() {Autobuyer(10).setMode(this.value)}~>
                <option value="Multiplier">Multiplier</option>
                <option value="Time">Time</option>
                <option value="Time since possible">Time since possible</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(10).mode() ~:</span>
              <br/>
              <span><input type="text" class="autobuyer-priority-10" ~!value=autobuyerSettingToString(Autobuyer(10).priority(), 10)~ ~!onchange=function() {Autobuyer(10).setPriority(stringToAutobuyerSetting(this.value, 10))}~></input></span>
            </div>
          </td>
          <td>
            <div class="tallautobuyerdiv" ~style.display=Autobuyer(11).hasAutobuyer() ? '' : 'none'~>
              <span>Prestige Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-11" ~!checked=Autobuyer(11).isOn()~ ~!onchange=function() {Autobuyer(11).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(11).mode()~ ~!onchange=function() {Autobuyer(11).setMode(this.value)}~>
                <option value="Multiplier">Multiplier</option>
                <option value="Time">Time</option>
                <option value="Time since possible">Time since possible</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(11).mode() ~:</span>
              <br/>
              <span><input type="text" class="autobuyer-priority-11" ~!value=autobuyerSettingToString(Autobuyer(11).priority(), 11)~ ~!onchange=function() {Autobuyer(11).setPriority(stringToAutobuyerSetting(this.value, 11))}~></input></span>
            </div>
          </td>
          <td>
            <div class="tallautobuyerdiv" ~style.display=Autobuyer(12).hasAutobuyer() ? '' : 'none'~>
              <span>Infinity Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-12" ~!checked=Autobuyer(12).isOn()~ ~!onchange=function() {Autobuyer(12).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(12).mode()~ ~!onchange=function() {Autobuyer(12).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
                <option value="X times best of last ten" ~text="X times best of last " + numbers[Stats.lastRunsToShow()]~></option>
                <option value="Time past peak/sec">Time past peak/sec</option>
                <option value="Fraction of peak/sec">Fraction of peak/sec</option>
                <option value="Time past peak log/sec">Time past peak log/sec</option>
                <option value="Fraction of peak log/sec">Fraction of peak log/sec</option>
                <option value="Time since gain was amount">Time since gain was amount</option>
                <option value="Time since gain was total">Time since gain was total</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(12).displayMode() ~:</span>
              <br/>
              <span><input type="text" class="autobuyer-priority-12" ~!value=autobuyerSettingToString(Autobuyer(12).priority(), 12)~ ~!onchange=function() {Autobuyer(12).setPriority(stringToAutobuyerSetting(this.value, 12))}~></input></span>
              <div ~style.display=Autobuyer(12).hasGeneration() ? '' : 'none'~ style="font-size: 0.75rem;">
                <span>Not on by default due to IP generation</span>
                <br/>
                <span>Turn on anyway: <input type="checkbox" ~!checked=Autobuyer(12).isOnDespiteSuspended()~ ~!onchange=function() {Autobuyer(12).setIsOnDespiteSuspended(this.checked)}~></input></span>
              </div>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="tallautobuyerdiv" ~style.display=Autobuyer(13).hasAutobuyer() ? '' : 'none'~>
              <span>Eternity Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-13" ~!checked=Autobuyer(13).isOn()~ ~!onchange=function() {Autobuyer(13).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(13).mode()~ ~!onchange=function() {Autobuyer(13).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
                <option value="X times best of last ten" ~text="X times best of last " + numbers[Stats.lastRunsToShow()]~></option>
                <option value="Time past peak/sec">Time past peak/sec</option>
                <option value="Fraction of peak/sec">Fraction of peak/sec</option>
                <option value="Time past peak log/sec">Time past peak log/sec</option>
                <option value="Fraction of peak log/sec">Fraction of peak log/sec</option>
                <option value="Time since gain was amount">Time since gain was amount</option>
                <option value="Time since gain was total">Time since gain was total</option>
                <option value="Chroma amount" ~style.display=(Chroma.isUnlocked() || PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~>Chroma amount</option>
                <option value="Chroma as fraction of cap" ~style.display=(Chroma.isUnlocked() || PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~>Chroma as fraction of cap</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(13).displayMode() ~:</span>
              <br/>
              <span><input type="text" class="autobuyer-priority-13" ~!value=autobuyerSettingToString(Autobuyer(13).priority(), 13)~ ~!onchange=function() {Autobuyer(13).setPriority(stringToAutobuyerSetting(this.value, 13))}~></input></span>
              <div ~style.display=Autobuyer(13).hasGeneration() ? '' : 'none'~ style="font-size: 0.75rem;">
                <span>Not on by default due to EP generation</span>
                <br/>
                <span>Turn on anyway: <input type="checkbox" ~!checked=Autobuyer(13).isOnDespiteSuspended()~ ~!onchange=function() {Autobuyer(13).setIsOnDespiteSuspended(this.checked)}~></input></span>
              </div>
            </div>
          </td>
          <td>
            <div class="tallautobuyerdiv" ~style.display=Autobuyer(14).hasAutobuyer() ? '' : 'none'~>
              <span>Permanence Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-14" ~!checked=Autobuyer(14).isOn()~ ~!onchange=function() {Autobuyer(14).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(14).mode()~ ~!onchange=function() {Autobuyer(14).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(14).displayMode() ~:</span>
              <br/>
              <span><input type="text" class="autobuyer-priority-14" ~!value=autobuyerSettingToString(Autobuyer(14).priority(), 14)~ ~!onchange=function() {Autobuyer(14).setPriority(stringToAutobuyerSetting(this.value, 14))}~></input></span>
              <div ~style.display=Autobuyer(14).hasGeneration() ? '' : 'none'~ style="font-size: 0.75rem;">
                <span>Not on by default due to permanence generation</span>
                <br/>
                <span>Turn on anyway: <input type="checkbox" ~!checked=Autobuyer(14).isOnDespiteSuspended()~ ~!onchange=function() {Autobuyer(14).setIsOnDespiteSuspended(this.checked)}~></input></span>
              </div>
            </div>
          </td>
          <td>
            <div class="tallautobuyerdiv" ~style.display=Autobuyer(15).hasAutobuyer() ? '' : 'none'~>
              <span>Complexity Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-15" ~!checked=Autobuyer(15).isOn()~ ~!onchange=function() {Autobuyer(15).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(15).mode()~ ~!onchange=function() {Autobuyer(15).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
                <option value="X times best of last ten" ~text="X times best of last " + numbers[Stats.lastRunsToShow()]~></option>
                <option value="Time past peak/sec">Time past peak/sec</option>
                <option value="Fraction of peak/sec">Fraction of peak/sec</option>
                <option value="Time past peak log/sec">Time past peak log/sec</option>
                <option value="Fraction of peak log/sec">Fraction of peak log/sec</option>
                <option value="Time since gain was amount">Time since gain was amount</option>
                <option value="Time since gain was total">Time since gain was total</option>
                <option value="Eternity power extra multiplier" ~style.display=(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Eternity power extra multiplier</option>
                <option value="Galaxy effect (0 means cap)" ~style.display=(Galaxy.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Galaxy effect (0 means cap)</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(15).displayMode() ~:</span>
              <br/>
              <span><input type="text" class="autobuyer-priority-15" ~!value=autobuyerSettingToString(Autobuyer(15).priority(), 15)~ ~!onchange=function() {Autobuyer(15).setPriority(stringToAutobuyerSetting(this.value, 15))}~></input></span>
              <div ~style.display=Autobuyer(15).hasGeneration() ? '' : 'none'~ style="font-size: 0.75rem;">
                <span>Not on by default due to ℂP generation</span>
                <br/>
                <span>Turn on anyway: <input type="checkbox" ~!checked=Autobuyer(15).isOnDespiteSuspended()~ ~!onchange=function() {Autobuyer(15).setIsOnDespiteSuspended(this.checked)}~></input></span>
              </div>
            </div>
          </td>
        </tr>
        <tr>
          <td/>
          <td>
          <div class="tallautobuyerdiv" ~style.display=Autobuyer(16).hasAutobuyer() ? '' : 'none'~>
            <span>Finality Autobuyer</span>
            <br/>
            <span>On: <input type="checkbox" class="autobuyer-checkbox-16" ~!checked=Autobuyer(16).isOn()~ ~!onchange=function() {Autobuyer(16).setIsOn(this.checked)}~></input></span>
          </div>
        </td>
        <td/>
      </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'infinity-challenges' ? '' : 'none'~>
      <span>You have completed ~i InfinityChallenge.numberOfInfinityChallengesCompleted() ~ infinity challenge~s InfinityChallenge.numberOfInfinityChallengesCompleted() ~, multiplying all infinity generators by ~f InfinityChallenge.multiplier() ~.</span>
      <br/>
      <span>You have produced ~f InfinityChallenge.totalStarsProducedThisEternity() ~ stars this eternity.</span>
      <br/>
      <span><button onclick="InfinityChallenge.toggleRestartOnCompletion()">Restart infinity challenges on completion: ~r InfinityChallenge.restartOnCompletion() ? "On" : "Off" ~</button></span>
      <br/>
      <br/>
      <span>To complete an infinity challenge, infinity while in the infinity challenge.</span>
      <br/>
      <span style="display: inline-block; height: 25px;">~r InfinityChallenge.isSomeInfinityChallengeRunning() ? '' : '\u200b' ~<button ~style.display=InfinityChallenge.isSomeInfinityChallengeRunning() ? '' : 'none'~ onclick="InfinityChallenge.exitInfinityChallenge()">Exit Infinity Challenge ~o InfinityChallenge.currentInfinityChallenge() ~ (~r InfinityChallenge.exitInfinityChallengeHeaderButtonText() ~)</button>  <button ~style.display=InfinityChallenge.isSomeInfinityChallengeRunning() ? '' : 'none'~ onclick="InfinityChallenge.restartInfinityChallenge()">Reset it (exit and start again)</button></span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(1)~>
              <span>Infinity Challenge ~o 1 ~</span>
              <br/>
              <span>Normal Challenges ~o 2 ~, ~o 3 ~, ~o 4 ~, ~o 5 ~, ~o 6 ~, and ~o 7 ~ all apply.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(1) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(1) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(1) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(1) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(1)">~r InfinityChallenge.infinityChallengeButtonText(1) ~</button></span>
              <br/>
              <span>Reward: The multiplier to generators based on total IP this eternity is uncapped.</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(2)~>
              <span>Infinity Challenge ~o 2 ~</span>
              <br/>
              <span>Prestige power is raised ^~f 0.5 ~, but sacrifice is far stronger.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(2) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(2) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(2) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(2) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(2)">~r InfinityChallenge.infinityChallengeButtonText(2) ~</button></span>
              <br/>
              <span>Reward: Sacrifice is stronger.</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(3)~>
              <span>Infinity Challenge ~o 3 ~</span>
              <br/>
              <span>The prestige power formula is worse the more prestiges you do.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(3) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(3) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(3) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(3) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(3)">~r InfinityChallenge.infinityChallengeButtonText(3) ~</button></span>
              <br/>
              <span>Reward: Multiplier to Infinity Generator ~o 1 ~ based on prestige power (~f InfinityChallenge.infinityChallenge3Reward() ~).</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(4)~>
              <span>Infinity Challenge ~o 4 ~</span>
              <br/>
              <span>There's an exponent on the multipliers of all ~r Generators.term() ~ increasing linearly from ~i 0 ~ to ~i 1 ~ over ~ti 16 ~. Every time you buy a generator or boost, or sacrifice or prestige, this exponent resets to ~i 0 ~.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(4) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(4) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(4) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(4) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(4)">~r InfinityChallenge.infinityChallengeButtonText(4) ~</button></span>
              <br/>
              <span>Reward: Multiplier to all infinity generators based on time in infinity (~f InfinityChallenge.infinityChallenge4Reward() ~).</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(5)~>
              <span>Infinity Challenge ~o 5 ~</span>
              <br/>
              <span>There's an exponent on the multipliers of all ~r Generators.term() ~ based on stars, capping at ~i 1 ~.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(5) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(5) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(5) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(5) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(5)">~r InfinityChallenge.infinityChallengeButtonText(5) ~</button></span>
              <br/>
              <span>Reward: Exponent to Infinity Generator ~o 5 ~ multiplier based on stars (~f InfinityChallenge.infinityChallenge5Reward() ~).</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(6)~>
              <span>Infinity Challenge ~o 6 ~</span>
              <br/>
              <span>The prestige power formula alternates between being raised ^~i 1 ~ (as usual) and ^~f 0.5 ~ every time you prestige.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(6) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(6) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(6) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(6) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(6)">~r InfinityChallenge.infinityChallengeButtonText(6) ~</button></span>
              <br/>
              <span>Reward: Exponent to prestige power based on infinity stars (~f InfinityChallenge.infinityChallenge6Reward() ~).</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(7)~>
              <span>Infinity Challenge ~o 7 ~</span>
              <br/>
              <span>Prestige power is raised ^~f 0.5 ~, but the multiplier per boost is squared.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(7) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(7) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(7) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(7) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(7)">~r InfinityChallenge.infinityChallengeButtonText(7) ~</button></span>
              <br/>
              <span>Reward: ~i 2 ~ is added to the multiplier per boost.</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(8)~>
              <span>Infinity Challenge ~o 8 ~</span>
              <br/>
              <span>You can only buy ~i 7 ~ total ~r Generators.term() ~ (apart from Generator ~o 8 ~) and boosts throughout this challenge. Each Generator ~o 8 ~ you buy gives you ~i 8 ~ extra purchases.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(8) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(8) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(8) ~</span>
              <br/>
              <span><button ~class=InfinityChallenge.canStartOrExitInfinityChallenge(8) ? '' : 'disabled'~ onclick="InfinityChallenge.startOrExitInfinityChallenge(8)">~r InfinityChallenge.infinityChallengeButtonText(8) ~</button></span>
              <br/>
              <span>Reward: Multiplier to Infinity Generator ~o 8 ~ equal to number of Generator ~o 8 ~ (lower-bounded by ~i 1 ~).</span>
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity' ? '' : 'none'~>
      <span>You have ~i EternityPoints.amount() ~ eternity point~s EternityPoints.amount() ~ (EP).
        <button ~class=EternityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="EternityMaxAll.maxAll()">Max all</button>
        <button ~class=EternityMaxAll.anyUpgradesToBuy() ? "" : "disabled"~ onclick="EternityMaxAll.maxUpgrades()">Max upgrades</button>
        <button ~class=EternityMaxAll.anyGeneratorsToBuy() ? "" : "disabled"~ onclick="EternityMaxAll.maxGenerators()">Max generators</button>
      </span>
      <br/>
      <span>You have produced ~i EternityPoints.totalEPProducedThisComplexity() ~ eternity point~s EternityPoints.totalEPProducedThisComplexity() ~ this complexity, multiplying all eternity generators by ~f EternityUpgrade(3).effect() ~.</span></span>
      <br/>
      <span>You have ~q Eternities.amount() ~ eternit~y Eternities.amount() ~, multiplying all eternity generators (EGs) by ~q Eternities.eternityGeneratorMultiplierForDisplay() ~.</span>
      <br/>
      <span>You have ~f EternityStars.amount() ~ eternity stars, multiplying all normal and infinity generators by ~f EternityStars.multiplier() ~</span>
      <br/>
      <span>and raising all normal and infinity generator multipliers ^~r formatPrecisely(EternityStars.power()) ~.</span>
      <br/>
      <span>You are getting ~f EternityStars.perSecond() ~ eternity stars per second.</span>
      <br/>
      <span>View all eternity generators even if they would be otherwise invisible: <input type="checkbox" ~!checked=Options.rawViewAllGenerators('eternity')~ ~!onchange=function() {Options.setRawViewAllGenerators('eternity', this.checked)}~></input></span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <th colspan="5">Eternity Upgrades:</th>
        <tr>
          <td>Increase the per-purchase multiplier for EGs:</td>
          <td><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? 'none' : ''~>^~i EternityUpgrade(1).effect() ~ → ^~i EternityUpgrade(1).nextEffect() ~</span><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? '' : 'none'~>^~i EternityUpgrade(1).effect() ~ (maxed)</span></td>
          <td><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(1).buy()">Cost: ~i EternityUpgrade(1).cost() ~ EP</button></span></td>
          <td><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(1).buyMax()">Max</button></span></td>
          <td><span ~style.display=EternityAutobuyer(9).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(9).toggle()">Auto: ~r EternityAutobuyer(9).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
        <tr>
          <td>Increase the multiplier per boost:</td>
          <td><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f EternityUpgrade(2).effect() ~x → ~f EternityUpgrade(2).nextEffect() ~x</span><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f EternityUpgrade(2).effect() ~x (maxed)</span></td>
          <td><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(2).buy()">Cost: ~i EternityUpgrade(2).cost() ~ EP</button></span></td>
          <td><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(2).buyMax()">Max</button></span></td>
          <td><span ~style.display=EternityAutobuyer(10).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(10).toggle()">Auto: ~r EternityAutobuyer(10).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to EGs based on total EP this complexity:</td>
          <td><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? 'none' : ''~>~f EternityUpgrade(3).effect() ~x → ~f EternityUpgrade(3).nextEffect() ~x</span><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f EternityUpgrade(3).effect() ~x (maxed)</span></td>
          <td><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(3).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(3).buy()">Cost: ~i EternityUpgrade(3).cost() ~ EP</button></span></td>
          <td><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(3).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(3).buyMax()">Max</button></span></td>
          <td><span ~style.display=EternityAutobuyer(11).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(11).toggle()">Auto: ~r EternityAutobuyer(11).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
      </table>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <loop i 1 8>
          <tr ~style.display=EternityGenerator(% @i %).isVisible() ? '' : 'none'~>
            <td>Eternity Generator ~o % @i % ~</td>
            <td>~f EternityGenerator(% @i %).amount() ~</td>
            <td>~f EternityGenerator(% @i %).perSecond() ~/s</td>
            <td>~f EternityGenerator(% @i %).multiplier() ~x</td>
            <td><button ~class=EternityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(% @i %).buy()">Cost: ~i EternityGenerator(% @i %).cost() ~ EP</button></td>
            <td><button ~class=EternityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(% @i %).buyMax()">Max</button></td>
            <td><button ~style.display=EternityAutobuyer(% @i %).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(% @i %).toggle()">Auto: ~r EternityAutobuyer(% @i %).isOn() ? "On" : "Off" ~</button></td>
          </tr>
        </loop>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity-milestones' ? '' : 'none'~>
      <span>
        You have ~q Eternities.amount() ~ eternit~y Eternities.amount() ~.
        <button ~style.display=(EternityMilestones.hasEternityMilestone(6) || PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~ onclick="EternityMilestones.toggleMilestone(6)">Eternity Milestone ~i 6 ~: ~r (EternityMilestones.isEternityMilestoneDisabled(6) ? "Disabled" : "Enabled") + (EternityMilestones.hasEternityMilestone(6) ? '' : ' (once unlocked)') ~</button>
        <button ~style.display=(EternityMilestones.hasEternityMilestone(8) || PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~ onclick="EternityMilestones.toggleMilestone(8)">Eternity Milestone ~i 8 ~: ~r (EternityMilestones.isEternityMilestoneDisabled(8) ? "Disabled" : "Enabled") + (EternityMilestones.hasEternityMilestone(8) ? '' : ' (once unlocked)') ~</button>
      </span>
      <br ~style.display=Explanations.isVisible('eternity-milestones', 'main') ? '' : 'none'~ onclick="Explanations.showOrHide('eternity-milestones', 'main')"/>
      <button ~style.display=Explanations.isVisible('eternity-milestones', 'main') ? '' : 'none'~ onclick="Explanations.showOrHide('eternity-milestones', 'main')">Complexity reset effect explanation: ~r Explanations.isShown('eternity-milestones', 'main') ? 'Shown' : 'Hidden' ~</button>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Explanations.isShown('eternity-milestones', 'main') ? '' : 'none'~>
        <span>Complexity and resets beyond complexity will reset eternity milestones, and will lock those milestones (including the ones saying "Start each ... complexity"), removing their effects until you unlock the milestones again. Once you start with enough eternities after complexity to start with eternity milestones unlocked, however, those milestones will have an effect even at the start of a complexity. This situation will also arise later in the game with other similar mechanics.<span>
      </div>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(1)~>
              ~i 1 ~ eternity
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(1) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAboveDisplay('prestige') ~ with stars based on your eternities (currently ~i EternityStartingBenefits.rawStars() ~)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(2)~>
              ~i 2 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(2) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAboveDisplay('eternity') ~ with all normal challenges completed. (You also keep autobuyers and infinity remains broken.)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(3)~>
              ~i 3 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(3) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAboveDisplay('eternity') ~ with infinity points based on your eternities (currently ~i EternityStartingBenefits.rawInfinityPoints() ~)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(4)~>
              ~i 4 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(4) ~
              <br/>
              Automatically complete ~r EternityStartingBenefits.rawInfinityChallengesText() ~ as soon as you unlock ~r pluralize(EternityStartingBenefits.rawInfinityChallenges(), 'it', 'them') ~ (based on eternities)
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(5)~>
              ~i 5 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(5) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAboveDisplay('eternity') ~ with infinities based on your eternities (currently ~i EternityStartingBenefits.rawInfinities() ~)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(6)~>
              ~i 6 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(6) ~
              <br/>
              Sacrifice no longer resets anything.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(7)~>
              ~i 7 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(7) ~
              <br/>
              Unlock autobuyers for repeatable infinity upgrades.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(8)~>
              ~i 8 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(8) ~
              <br/>
              Prestige no longer resets anything.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(9)~>
              ~i 9 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(9) ~
              <br/>
              Unlock an Infinity Generator ~o 1 ~ autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(10)~>
              ~i 10 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(10) ~
              <br/>
              Unlock an Infinity Generator ~o 2 ~ autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(11)~>
              ~i 11 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(11) ~
              <br/>
              Unlock an Infinity Generator ~o 3 ~ autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(12)~>
              ~i 12 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(12) ~
              <br/>
              Unlock an Infinity Generator ~o 4 ~ autobuyer.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(13)~>
              ~i 13 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(13) ~
              <br/>
              Unlock an Infinity Generator ~o 5 ~ autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(14)~>
              ~i 14 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(14) ~
              <br/>
              Unlock an Infinity Generator ~o 6 ~ autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(15)~>
              ~i 15 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(15) ~
              <br/>
              Unlock an Infinity Generator ~o 7 ~ autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(16)~>
              ~i 16 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(16) ~
              <br/>
              Unlock an Infinity Generator ~o 8 ~ autobuyer, and an eternity autobuyer.
            </div>
          </td>
        </tr>
      </table>
      <span ~style.display=SpecialTabs.isTabVisible('eternity-producer') ? 'none' : ''~>Completing all eternity milestones for the first time will also let you view the Eternity Producer tab.</span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'studies' ? '' : 'none'~>
      <span>You have ~i Studies.totalTheorems() ~ total theorem~s Studies.totalTheorems() ~ (a breakdown is below the theorem purchase buttons) and ~i Studies.unspentTheorems() ~ unspent theorem~s Studies.unspentTheorems() ~.</span>
      <br/>
      <div ~style.display=Options.showFullOptions('studies') ? 'none' : ''~>
        <button onclick="Studies.respecAndReset()" ~class=Studies.canRespec() ? "" : "disabled"~ ~style.display=Studies.canAccessFourthRow() ? 'none' : ''~>Respec studies and ~r EternityPrestigeLayer.resetText() ~</button>
        <button onclick="Studies.respecFourthRowAndReset()" ~class=Studies.canRespecFourthRow() ? "" : "disabled"~ ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~ ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>Respec fourth-row studies and ~r EternityPrestigeLayer.resetText() ~</button>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>There are a lot of study options. To see the others, go to the options tab and toggle (turn on) "Full study options" in the "other options" part.</span>
        </div>
      </div>
      <div ~style.display=Options.showFullOptions('studies') ? '' : 'none'~>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <button class="studies-export-button" onclick="Studies.export()">Export studies</button> <button onclick="Studies.import()">Import studies</button>
          <button onclick="Studies.toggleRespec()">Respec studies on next eternity: ~r Studies.isRespecOn() ? "On" : "Off" ~</button>
          <button ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~ ~class=Studies.canMaxFourthRowStudies() ? '' : 'disabled' ~ onclick="Studies.maxFourthRowStudies()">Max fourth-row studies</button>
          <button onclick="Studies.respecAndReset()" ~class=Studies.canRespec() ? "" : "disabled"~>Respec studies and ~r EternityPrestigeLayer.resetText() ~</button>
          <button onclick="Studies.respecFourthRowAndReset()" ~class=Studies.canRespecFourthRow() ? "" : "disabled"~ ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>Respec fourth-row studies and ~r EternityPrestigeLayer.resetText() ~</button>
        </div>
        <br/>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <button onclick="Studies.changeMode()">Study click mode: ~r Studies.mode() ~ (reversed when holding shift)</button> <button onclick="Studies.changeCostDisplayMode()">Cost display: ~r Studies.costDisplayMode() ~</button>
          <button ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~ onclick="Studies.toggleRebuyAfterComplexityChallenge6()">Rebuy studies when finishing ℂC6: ~r Studies.rebuyAfterComplexityChallenge6() ? "On" : "Off" ~</button>
          <button onclick="Studies.toggleShowPresetExplanation()">Show explanation of presets and exported studies: ~r Studies.showPresetExplanation() ? "On" : "Off" ~</button>
        </div>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>There are a lot of study options. To hide most of them, go to the options tab and toggle (turn off) "Full study options" in the "other options" part.</span>
        </div>
      </div>
      <br/>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">
        <div ~style.display=Options.showFullOptions('studies') ? '' : 'none'~>
          <button onclick="Studies.togglePresetRespec()">Respec studies when loading a preset: ~r Studies.presetRespec() ? "On" : "Off" ~ (reversed when holding shift)</button></span>
        </div>
        <span>Click on the name of a study preset on the line below to load that study list:</span>
        <br/>
        <div ~style.display=Studies.hasPreset(1) ? 'none' : ''~>
          You don't currently have any study presets. You can create presets at the bottom of this tab.
          <br/>
          Presets can be used to load study lists more easily.
        </div>
        <loop i 1 64>
          <button ~class=Studies.presetClass(% @i %)~ ~style.display=Studies.hasPreset(% @i %) ? '' : 'none'~ onclick="Studies.presetLoad(% @i %)">~r Studies.presetName(% @i %) ~</button>
        </loop>
      </div>
      <div ~style.display=Studies.showPresetExplanation() ? '' : 'none'~>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          Exporting studies and preset study lists use the same syntax, which is explained below.
          More of the syntax will be explained as it becomes useful.<span ~style.display=Studies.couldEverAccessFourthRow() ? '' : 'none'~> Currently all the syntax is visible.</span>
        </div>
        <br/>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          Loading the study list a,b,c,...,z tries to buy Study a, then Study b, then Study c, and so on, until it has bought Study z.
          If the game cannot buy a study in the list with the available theorems, it will continue to the next study in the list rather than stopping.
          <span ~style.display=Studies.couldEverAccessFourthRow() ? '' : 'none'~>Note that you can put fourth-row studies (that is, numbers from 13 to 16) in this list, but there is a more convenient syntax for fourth-row studies explained below.</span>
        </div>
        <br ~style.display=EternityChallenge.areEternityChallengesVisible() ? '' : 'none'~/>
        <div ~style.display=EternityChallenge.areEternityChallengesVisible() ? '' : 'none'~ style="width: 1024px; margin-left: auto; margin-right: auto;">
          Adding |ux to the end of a study list (where the u is a literal u) will keep at least x theorems unspent by studies no matter what. It's fine if those theorems are spent on an eternity challenge.
          |cx is like |ux, except it uses the cost of Eternity Challenge x rather than the value of x. This is useful for eternity challenges.
          Adding ! to a preset with |x will try to unlock the eternity challenge, and adding !! will try to start it. Additional exclamation marks have no additional effect.
          When you have an eternity challenge unlocked and export a study list, that study list will have |cx!, where x is the eternity challenge, and it will have |cx!! if you are in the eternity challenge.
          <span ~style.display=(EternityChallenge.isEternityChallengeUnlockingMeaningless() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>("Broke every stone" disables this.)</span>
        </div>
        <br ~style.display=Studies.couldEverAccessFourthRow() ? '' : 'none'~/>
        <div ~style.display=Studies.couldEverAccessFourthRow() ? '' : 'none'~ style="width: 1024px; margin-left: auto; margin-right: auto;">
          Adding &amp;a,b,c,d to the end of a study list will try to buy Study ~o 13 ~ up to a total times, then Study ~o 14 ~ b total times, and so on.
          If the game cannot buy a study in the list as many times as asked for, it will move to the next study.
          Adding &amp;sa,b,c,d, where the s is a literal s, will instead try to spend theorems on fourth-row studies in proportion to their costs when bought a, b, c, and d times.
          This &amp;sa,b,c,d syntax allows for a preset to keep the same relative values between fourth-row studies (that is, which is more important and which is less) without the preset changing for every fourth-row study purchase.
        </div>
      </div>
      <div ~style.display=Studies.isAutoLoadUnlocked() ? '' : 'none'~>
        Study list to constantly load: <input style="width: 256px;" type="text" ~!value=Studies.studyListToAutoLoad()~ ~!onchange=function() {Studies.setStudyListToAutoLoad(this.value)}~></input> <button onclick="Studies.toggleAutoLoad()">Auto-load: ~r Studies.isAutoLoadOn() ? "On" : "Off" ~</button>
        <br/>
        Total cost: ~r Studies.studyListCostText(Studies.presetIdToPresetString(Studies.studyListToAutoLoad())) ~
      </div>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 8px 8px; border-collapse: separate;">
        <tr>
          <td>
            <button ~class=Study(1).className()~ onclick="Study(1).click()">
              Study ~o 1 ~
              <br/>
              Double per-boost multiplier
              <br/>
              Currently: ~f Study(1).rawTotalEffect() ~x
              <br/>
              Cost: ~i Study(1).displayCost() ~ theorem~s Study(1).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(2).className()~ onclick="Study(2).click()">
              Study ~o 2 ~
              <br/>
              Multiplier to normal generators based on prestige power
              <br/>
              Currently: ~f Study(2).rawEffect() ~x
              <br/>
              Cost: ~i Study(2).displayCost() ~ theorem~s Study(2).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(3).className()~ onclick="Study(3).click()">
              Study ~o 3 ~
              <br/>
              Multiplier to normal generators based on total stars this complexity
              <br/>
              Currently: ~f Study(3).rawEffect() ~x
              <br/>
              Cost: ~i Study(3).displayCost() ~ theorem~s Study(3).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(4).className()~ onclick="Study(4).click()">
              Study ~o 4 ~
              <br/>
              Multiplier to normal generators based on total theorems
              <br/>
              Currently: ~f Study(4).rawEffect() ~x
              <br/>
              Cost: ~i Study(4).displayCost() ~ theorem~s Study(4).displayCost() ~
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Study(5).className()~ onclick="Study(5).click()">
              Study ~o 5 ~
              <br/>
              Multiplier to infinity generators based on number of boosts
              <br/>
              Currently: ~f Study(5).rawEffect() ~x
              <br/>
              Cost: ~i Study(5).displayCost() ~ theorem~s Study(5).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(6).className()~ onclick="Study(6).click()">
              Study ~o 6 ~
              <br/>
              Multiplier to infinity generators based on prestige power
              <br/>
              Currently: ~f Study(6).rawEffect() ~x
              <br/>
              Cost: ~i Study(6).displayCost() ~ theorem~s Study(6).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(7).className()~ onclick="Study(7).click()">
              Study ~o 7 ~
              <br/>
              Multiplier to infinity generators based on eternities
              <br/>
              ~r Study(7).cappedText() ~: ~f Study(7).rawEffect() ~x
              <br/>
              Cost: ~i Study(7).displayCost() ~ theorem~s Study(7).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(8).className()~ onclick="Study(8).click()">
              Study ~o 8 ~
              <br/>
              Multiplier to infinity generators based on total theorems
              <br/>
              Currently: ~f Study(8).rawEffect() ~x
              <br/>
              Cost: ~i Study(8).displayCost() ~ theorem~s Study(8).displayCost() ~
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Study(9).className()~ onclick="Study(9).click()">
              Study ~o 9 ~
              <br/>
              Eternity generators are multiplied by <span ~style.display=InfinityChallenge.isInfinityChallengeRunning(7) ? '' : 'none'~>square root of</span> per-boost multiplier
              <br/>
              Currently: ~f Study(9).rawEffect() ~x
              <br/>
              Cost: ~i Study(9).displayCost() ~ theorem~s Study(9).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(10).className()~ onclick="Study(10).click()">
              Study ~o 10 ~
              <br/>
              Multiplier to eternity generators based on prestige power
              <br/>
              Currently: ~f Study(10).rawEffect() ~x
              <br/>
              Cost: ~i Study(10).displayCost() ~ theorem~s Study(10).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(11).className()~ onclick="Study(11).click()">
              Study ~o 11 ~
              <br/>
              Multiplier to eternity generators based on eternity stars and time in eternity
              <br/>
              ~r Study(11).cappedText() ~: ~f Study(11).rawEffect() ~x
              <br/>
              Cost: ~i Study(11).displayCost() ~ theorem~s Study(11).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(12).className()~ onclick="Study(12).click()">
              Study ~o 12 ~
              <br/>
              Multiplier to eternity generators based on total theorems
              <br/>
              Currently: ~f Study(12).rawEffect() ~x
              <br/>
              Cost: ~i Study(12).displayCost() ~ theorem~s Study(12).displayCost() ~
            </button>
          </td>
        </tr>
        <tr ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>
          <td>
            <button ~class=Study(13).className()~ onclick="Study(13).click()">
              Study ~o 13 ~
              <br/>
              Large fixed multiplier to normal generators
              <br/>
              Currently: ~f Study(13).effect() ~x
              <br/>
              Next: ~f Study(13).nextEffect() ~x
              <br/>
              Cost: ~i Study(13).displayCost() ~ theorem~s Study(13).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(14).className()~ onclick="Study(14).click()">
              Study ~o 14 ~
              <br/>
              Multiplier to infinity generators based on total color value
              <br/>
              Currently: ~f Study(14).effect() ~x
              <br/>
              Next: ~f Study(14).nextEffect() ~x
              <br/>
              Cost: ~i Study(14).displayCost() ~ theorem~s Study(14).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(15).className()~ onclick="Study(15).click()">
              Study ~o 15 ~
              <br/>
              Eternity generators are multiplied by chroma
              <br/>
              Currently: ~f Study(15).effect() ~x
              <br/>
              Next: ~f Study(15).nextEffect() ~x
              <br/>
              Cost: ~i Study(15).displayCost() ~ theorem~s Study(15).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(16).className()~ onclick="Study(16).click()">
              Study ~o 16 ~
              <br/>
              Multiplier to chroma buildup speed based on total theorems
              <br/>
              Currently: ~f Study(16).effect() ~x
              <br/>
              Next: ~f Study(16).nextEffect() ~x
              <br/>
              Cost: ~i Study(16).displayCost() ~ theorem~s Study(16).displayCost() ~
            </button>
          </td>
        </tr>
      </table>
      <span ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~ class="greenalteredspan">
        There is also a small multiplier to the chroma cap based on total fourth-row study purchases (currently ~r formatPrecisely(Studies.chromaCapMultiplier()) ~x).
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 8px 0px; border-collapse: separate;">
        <tr>
          <td style="text-align: center;">
            You have ~f Stars.amount() ~ stars.
          </td>
          <td style="text-align: center;">
            You have ~i InfinityPoints.amount() ~ IP.
          </td>
          <td style="text-align: center;">
            You have ~i EternityPoints.amount() ~ EP.
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Studies.canBuy(0) ? '' : 'disabled'~ style="width: 320px; height: 96px;" onclick="Studies.buy(0)">
              Buy a theorem with stars
              <br/>
              Cost: ~i Studies.cost(0) ~ stars
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(1) ? '' : 'disabled'~ style="width: 320px; height: 96px;" onclick="Studies.buy(1)">
              Buy a theorem with infinity points
              <br/>
              Cost: ~i Studies.cost(1) ~ IP
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(2) ? '' : 'disabled'~ style="width: 320px; height: 96px;" onclick="Studies.buy(2)">
              Buy a theorem with eternity points
              <br/>
              Cost: ~i Studies.cost(2) ~ EP
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Studies.canBuy(0) ? '' : 'disabled'~ style="width: 320px; height: 48px;" onclick="Studies.buyMax(0)">
              Buy max theorems with stars
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(1) ? '' : 'disabled'~ style="width: 320px; height: 48px;" onclick="Studies.buyMax(1)">
              Buy max theorems with infinity points
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(2) ? '' : 'disabled'~ style="width: 320px; height: 48px;" onclick="Studies.buyMax(2)">
              Buy max theorems with eternity points
            </button>
          </td>
        </tr>
        <tr ~style.display=EternityAutobuyers.hasTheoremAutobuyers() ? '' : 'none'~>
          <td>
            <button style="width: 320px; height: 48px;" onclick="EternityAutobuyer(14).toggle()">
              Auto buy theorems with stars: ~r EternityAutobuyer(14).isOn() ? "On" : "Off" ~
            </button>
          </td>
          <td>
            <button style="width: 320px; height: 48px;" onclick="EternityAutobuyer(15).toggle()">
              Auto buy theorems with infinity points: ~r EternityAutobuyer(15).isOn() ? "On" : "Off" ~
            </button>
          </td>
          <td>
            <button style="width: 320px; height: 48px;" onclick="EternityAutobuyer(16).toggle()">
              Auto buy theorems with eternity points: ~r EternityAutobuyer(16).isOn() ? "On" : "Off" ~
            </button>
          </td>
        </tr>
      </table>
      <span ~style.display=Studies.canBuyGenerally() ? "none" : ""~>
        <span class="redspan">You have disabled buying theorems.</span> <button ~style.display=(ComplexityChallenge.isComplexityChallengeUnlocked(4) || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~ onclick="Studies.toggleCanBuyGenerally()">Buying theorems <span class="helpspan">(?)<span class="tooltiptext">Disabling buying theorems can help to unlock "Thousand-theorem twilight".</span></span>: ~r (Studies.canBuyGenerally() ? "Enabled" : "Disabled") ~</button>
      </span>
      <br ~style.display=Studies.canBuyGenerally() ? "none" : ""~/>
      <span>
        Bought theorems: ~i Studies.boughtTheoremsList()[0] ~ (from stars) + ~i Studies.boughtTheoremsList()[1] ~ (from IP) + ~i Studies.boughtTheoremsList()[2] ~ (from EP) = ~i Studies.boughtTheorems() ~.
      </span>
      <br/>
      <span>
        Extra theorems: ~r Studies.extraTheoremsBreakdownText() ~.
      </span>
      <br/>
      <span>
        Total theorems: ~i Studies.boughtTheorems() ~ (bought theorems) + ~i Studies.extraTheorems() ~ (extra theorems) = ~i Studies.totalTheorems() ~.
      </span>
      <br/>
      <br/>
      <span>
        Buying a study will increase the costs of all studies on other rows by ~i 2 ~ theorems.
      </span>
      <br/>
      <span>
        Despite this, the total cost of studies does not depend on the order you buy them in.
      </span>
      <br ~style.display=!PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=!PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>
        You need to eternity before you can buy theorems with anything.
      </span>
      <br ~style.display=Trivia.show('EG requirement for theorems') ? '' : 'none'~/>
      <span ~style.display=Trivia.show('EG requirement for theorems') ? '' : 'none'~>
        You need to buy at least one eternity generator before you can buy theorems with eternity points.
      </span>
      <br/>
      <span>
        After ~i 4 ~ theorem purchases of a certain type, theorem costs of that type start increasing far more quickly.
      </span>
      <br/>
      <div ~style.display=Studies.canAccessFourthRow() ? 'none' : ''~>
        <span>
          After you get ~i Studies.totalStudyCost() ~ theorems (enough to buy all the studies), a fourth row will appear.
        </span>
        <br/>
        <span>
          However, studies in this row can only be bought if all studies above are bought.
        </span>
      </div>
      <div ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>
        <span>
          Studies on the fourth row are rebuyable, with increasing costs.
        </span>
        <br/>
        <span>
          Their costs are unaffected by buying other studies. Their shown costs are always the cost of the next purchase.
        </span>
        <br/>
        <span>
          However, they can only be bought if all studies above are bought.
        </span>
      </div>
      <br/>
      <span>Presets (<button onclick="Studies.presetSort()">sort by name</button>):</span>
      <br/>
      <loop i 1 64>
        <div ~style.display=Studies.hasPreset(% @i %) ? '' : 'none'~>
          Name: <input class="presetname% @i %" type="text" ~!value=Studies.presetName(% @i %)~ ~!onchange=function() {Studies.setPresetName(% @i %, this.value)}~></input>
          Study list: <input class="presetstudylist% @i %" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(% @i %)~ ~!onchange=function() {Studies.setPresetStudyList(% @i %, this.value)}~></input>
          <button % (@i === 1) ? 'class="disabled" ' : '' %onclick="Studies.presetMoveUp(% @i %)">↑</button>
          <button % (@i === 64) ? `class="disabled"` : `~class=Studies.hasPreset(${@i + 1}) ? "" : "disabled"~` % onclick="Studies.presetMoveDown(% @i %)">↓</button>
          <button onclick="Studies.presetLoad(% @i %)">Load</button>
          <button onclick="Studies.presetSetToCurrentStudies(% @i %)">Change to current studies</button>
          <button onclick="Studies.presetDelete(% @i %)">Delete</button>
          <br/>
          Total cost of ~r Studies.presetName(% @i %) ~: ~r Studies.presetCostText(% @i %) ~
        </div>
      </loop>
      <span>
        <button ~style.display=Studies.hasPreset(64) ? 'none' : ''~ onclick="Studies.presetCreate()">Create a preset</button>
        <span ~style.display=Studies.hasPreset(64) ? '' : 'none'~>You can create at most ~i 64 ~ presets. Delete existing presets to create more.</span>
      </span>
      <br/>
      <span style="display: none;">Exported studies (also copied to clipboard): <input id="study-export-output"></input></span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity-producer' ? '' : 'none'~>
      <div ~style.display=EternityProducer.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="EternityProducer.unlock()" ~class=EternityProducer.canUnlock() ? '' : 'disabled'~>
          Unlock the Eternity Producer<br/>Cost: ~f EternityProducer.unlockCost() ~ eternity points
        </button>
        <br/>
        <span>The Eternity Producer, when unlocked, will produce ~q EternityProducer.productionPerSecondIfUnlocked() ~ eternit~y EternityProducer.productionPerSecondIfUnlocked() ~ per second<span ~style.display=Decimal.eq(EternityProducer.productionPerSecondIfUnlocked(), EternityProducer.rawProductionPerSecond()) ? 'none' : ''~> (~q EternityProducer.rawProductionPerSecond() ~ base production per second)</span>.</span>
        <br/>
        <span>It will also multiply all eternity generators by ~f EternityProducer.rawMultiplier() ~ (based on eternities).</span>
        <br/>
        <span>It can be improved via upgrades.</span>
        <br ~style.display=SpecialTabs.isTabVisible('eternity-challenges') ? 'none' : ''~/>
        <span ~style.display=SpecialTabs.isTabVisible('eternity-challenges') ? 'none' : ''~>Unlocking the Eternity Producer for the first time will also let you view the Eternity Challenges tab.</span>
      </div>
      <div ~style.display=(EternityProducer.isUnlocked() || Options.showAllTabs()) ? '' : 'none'~>
        <div ~style.display=EternityProducer.isUnlocked() ? 'none' : ''~>
          <br/>
          <span>Note that you cannot benefit from the Eternity Producer or buy Eternity Producer upgrades before you unlock the Eternity Producer.</span>
          <br/>
          <br/>
        </div>
        <span>You have ~q Eternities.amount() ~ eternit~y Eternities.amount() ~. Due to the Eternity Producer, they multiply all eternity generators by ~f EternityProducer.multiplier() ~.</span>
        <br/>
        <span>The Eternity Producer is producing ~q EternityProducer.productionPerSecond() ~ eternit~y EternityProducer.productionPerSecond() ~ per second.</span>
        <br/>
        <br/>
        <span>You have ~i EternityPoints.amount() ~ eternity point~s EternityPoints.amount() ~. <button ~class=EternityProducer.anythingToBuy() ? "" : "disabled"~ onclick="EternityProducer.maxAll()">Max Eternity Producer upgrades</button></span>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
          <tr>
            <td>Eternity Producer base production per second:</td>
            <td><span ~style.display=EternityProducerUpgrade(1).atDisplayBoughtLimit() ? 'none' : ''~>~i EternityProducerUpgrade(1).effect() ~ → ~i EternityProducerUpgrade(1).nextEffect() ~</span><span ~style.display=EternityProducerUpgrade(1).atDisplayBoughtLimit() ? '' : 'none'~>~i EternityProducerUpgrade(1).effect() ~ (maxed)</span></td>
            <td><span ~style.display=EternityProducerUpgrade(1).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(1).buy()">Cost: ~i EternityProducerUpgrade(1).cost() ~ EP</button></span></td>
            <td><span ~style.display=EternityProducerUpgrade(1).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(1).buyMax()">Max</button></span></td>
            <td><span ~style.display=EternityAutobuyer(12).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(12).toggle()">Auto: ~r EternityAutobuyer(12).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
          <tr>
            <td>Eternity Producer multiplier to EGs:</td>
            <td><span ~style.display=EternityProducerUpgrade(2).atDisplayBoughtLimit() ? 'none' : ''~>~f EternityProducerUpgrade(2).effect() ~ → ~f EternityProducerUpgrade(2).nextEffect() ~</span><span ~style.display=EternityProducerUpgrade(2).atDisplayBoughtLimit() ? '' : 'none'~>~f EternityProducerUpgrade(2).effect() ~ (maxed)</span></td>
            <td><span ~style.display=EternityProducerUpgrade(2).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(2).buy()">Cost: ~i EternityProducerUpgrade(2).cost() ~ EP</button></span></td>
            <td><span ~style.display=EternityProducerUpgrade(2).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(2).buyMax()">Max</button></span></td>
            <td><span ~style.display=EternityAutobuyer(13).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(13).toggle()">Auto: ~r EternityAutobuyer(13).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
        </table>
        <br/>
        <div ~style.display=Permanence.hasGainedPermanence() ? '' : 'none'~>
          <span>You have ~f Permanence.amount() ~ permanence. You get ~r Permanence.conversionText() ~.</span>
          <br/>
          <span>~r Permanence.productionPerSecondText() ~ <button ~class=Permanence.anythingToBuy() ? "" : "disabled"~ onclick="Permanence.maxAll()">Max permanence upgrades</button></span>
          <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
            <tr>
              <td>Multiplier to eternity gain:</td>
              <td><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? 'none' : ''~>~i PermanenceUpgrade(1).effect() ~ → ~i PermanenceUpgrade(1).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? '' : 'none'~>~i PermanenceUpgrade(1).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(1).buy()">Cost: ~i PermanenceUpgrade(1).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(1).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(17).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(17).toggle()">Auto: ~r EternityAutobuyer(17).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td>Power to Eternity Producer multiplier to EGs:</td>
              <td><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f PermanenceUpgrade(2).effect() ~ → ~f PermanenceUpgrade(2).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f PermanenceUpgrade(2).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(2).buy()">Cost: ~i PermanenceUpgrade(2).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(2).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(18).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(18).toggle()">Auto: ~r EternityAutobuyer(18).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td>Power to third-row study effects:</td>
              <td><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? 'none' : ''~>~f PermanenceUpgrade(3).effect() ~ → ~f PermanenceUpgrade(3).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f PermanenceUpgrade(3).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(3).buy()">Cost: ~i PermanenceUpgrade(3).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(3).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(19).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(19).toggle()">Auto: ~r EternityAutobuyer(19).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td>Multiplier to permanence based on eternity stars:</td>
              <td><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? 'none' : ''~>~f PermanenceUpgrade(4).effect() ~ → ~f PermanenceUpgrade(4).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? '' : 'none'~>~f PermanenceUpgrade(4).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(4).buy()">Cost: ~i PermanenceUpgrade(4).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(4).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(20).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(20).toggle()">Auto: ~r EternityAutobuyer(20).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
          </table>
        </div>
        <span ~style.display=Permanence.canGainPermanence() ? '' : 'none'~><button style="height: 48px;" onclick="Permanence.gainPermanence(true)">Lose all but ~i Permanence.getLeftoverEternities() ~ eternities,<br/>but gain ~f Permanence.permanenceGain() ~ permanence.</button></span>
        <span ~style.display=Permanence.canGainPermanence() ? 'none' : ''~>You need ~f Permanence.getRequiredEternities() ~ eternities to gain permanence.</span>
        <div ~style.display=Permanence.hasGainedPermanence() ? 'none' : ''~/>
          <span>Gaining permanence will cause you to lose all but ~i Permanence.getLeftoverEternities() ~ eternities, but you will not lose anything else.</span>
          <br/>
          <span>Permanence can be spent on a variety of upgrades that become visible when you gain permanence.</span>
          <br/>
          <span>You get ~r Permanence.conversionText() ~.</span>
        </div>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity-challenges' ? '' : 'none'~>
      <span>You have completed ~i EternityChallenge.getTotalEternityChallengeCompletions() ~ eternity challenge (EC) tier~s EternityChallenge.getTotalEternityChallengeCompletions() ~, giving you ~i EternityChallenge.extraTheoremsActualAndDisplay() ~ extra theorem~s EternityChallenge.extraTheoremsActualAndDisplay() ~ (~i 1 ~ per tier).</span>
      <br/>
      <span>
        <button ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~ onclick="EternityChallenge.toggleRespec()">Respec eternity challenge on next eternity: ~r EternityChallenge.isRespecOn() ? "On" : "Off" ~</button>
        <button ~style.display=EternityChallenge.showRequirementDisplayToggle() ? '' : 'none'~ onclick="EternityChallenge.toggleRequirementDisplay()">Show (now unneeded) eternity challenge requirements: ~r EternityChallenge.isRequirementDisplayOn() ? "On" : "Off" ~</button>
      </span>
      <div ~style.display=EternityChallenge.showAutoECCompletion() ? '' : 'none'~>
        <span>You auto-complete an EC tier once every ~tq EternityChallenge.autoECCompletionTime() ~, <span ~style.display=EternityChallenge.areAllEternityChallengesCompleted() ? 'none' : ''~>next in ~t EternityChallenge.timeUntilAutoECCompletion() ~</span><span ~style.display=EternityChallenge.areAllEternityChallengesCompleted() ? '' : 'none'~>and they're now fully complete</span>. <span class="helpspan">(?)<span class="tooltiptext">Getting more complexities <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>and finalities </span>speeds up auto-EC completion. Auto-EC completion completes all tiers of EC~o 1 ~ first, then all tiers of EC~o 2 ~, and so on. Some complexity achievements require no EC auto-completions this complexity; you may need to turn EC auto-completion off to get these.</span></span></span>
        <br ~style.display=EternityChallenge.usedAutoECCompletionThisComplexity() ? 'none' : ''~/>
        <span ~style.display=EternityChallenge.usedAutoECCompletionThisComplexity() ? 'none' : ''~>You have not yet used any EC auto-completions this complexity.</span>
        <br/>
        <span ~style.display=EternityChallenge.isAutoECCompletionOn() || EternityChallenge.imminentAutoECCompletionTiers() === 0 ? '' : 'none'~>Auto-completed EC tiers can be stored up by turning auto-EC completion off.</span>
        <br ~style.display=EternityChallenge.isAutoECCompletionOn() || EternityChallenge.imminentAutoECCompletionTiers() === 0 ? '' : 'none'~/>
        <span ~style.display=EternityChallenge.isAutoECCompletionOn() || EternityChallenge.imminentAutoECCompletionTiers() === 0 ? '' : 'none'~>When it's turned on again you'll get all the new auto-completed EC tiers at once.</span>
        <span ~style.display=!EternityChallenge.isAutoECCompletionOn() && EternityChallenge.imminentAutoECCompletionTiers() !== 0 ? '' : 'none'~>Turning auto-EC completion on would complete ~i EternityChallenge.imminentAutoECCompletionTiers() ~ eternity challenge tier~s EternityChallenge.imminentAutoECCompletionTiers() ~.</span>
        <br/>
        <button onclick="EternityChallenge.toggleAutoECCompletion()">Auto-EC completion: ~r EternityChallenge.isAutoECCompletionOn() ? "On" : "Off" ~</button>
      </div>
      <br ~style.display=EternityChallenge.showAutoECCompletion() ? 'none' : ''~/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(1)~>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(1) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(1)~>
        Multiplier to boost power gain based on eternity challenge tiers completed (~q EternityChallenge.getTotalCompletionsRewardRawEffect(1) ~)
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(2)~>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(2) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(2)~>
        Multiplier to eternity gain based on eternity challenge tiers completed (~q EternityChallenge.getTotalCompletionsRewardRawEffect(2) ~)
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(3)~>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(3) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(3)~>
        You gain your infinity points on infinity every second, without needing to infinity (IP generation)<span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? 'none' : ''~>, and you can view the Chroma tab</span>.
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(4)~>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(4) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span ~class=EternityChallenge.getTotalCompletionsRewardClass(4)~>
        ~r EternityChallenge.eternityChallengeTotalCompletionsReward4Text() ~
      </span>
      <br ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~/>
      <span ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
        <button onclick="EternityChallenge.respecAndReset()" ~class=EternityChallenge.canRespec() ? "" : "disabled"~>Respec eternity challenge and ~r EternityPrestigeLayer.resetText() ~</button>
      </span>
      <br/>
      <br/>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">
        <span>To complete an eternity challenge, eternity while in the eternity challenge. Completing or respeccing an eternity challenge will give all theorems spent on it back.</span>
      </div>
      <br/>
      <span style="display: inline-block; height: 25px;">
        ~r (EternityChallenge.currentEternityChallenge() || EternityChallenge.getUnlockedEternityChallenge() !== 0) ? '' : '\u200b' ~
        <button ~style.display=(EternityChallenge.currentEternityChallenge() || EternityChallenge.getUnlockedEternityChallenge() !== 0) ? '' : 'none' ~ onclick="EternityChallenge.pressUnlockedOrRunningEternityChallengeHeaderButton()">~r EternityChallenge.unlockedOrRunningEternityChallengeHeaderButtonText() ~</button>
        <button ~style.display=EternityChallenge.isSomeEternityChallengeRunning() ? '' : 'none'~ ~class=EternityChallenge.canRestartEternityChallenge() ? '' : 'disabled'~ onclick="EternityChallenge.restartEternityChallenge()">Reset it (~r EternityChallenge.restartEternityChallengeParentheticalText() ~)</button></span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(1)~>
              <span>Eternity Challenge ~o 1 ~</span>
              <br/>
              <span>There are exponents on all normal generator multipliers based on infinity stars and on all infinity generator multipliers based on eternity stars (both less than ~i 1 ~).</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(1) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(1) ~ theorem~s EternityChallenge.getEternityChallengeCost(1) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(1) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(1) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(1) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(1)">~r EternityChallenge.eternityChallengeButtonText(1) ~</button></span>
              <br/>
              <span>Reward: Multiplier to normal generators based on stars.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(1) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(1) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(1) ~x</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(2)~>
              <span>Eternity Challenge ~o 2 ~</span>
              <br/>
              <span>Boost costs are massively increased.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(2) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(2) ~ theorem~s EternityChallenge.getEternityChallengeCost(2) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(2) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(2) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(2) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(2)">~r EternityChallenge.eternityChallengeButtonText(2) ~</button></span>
              <br/>
              <span>Reward: Boosts are cheaper.</span>
              <br/>
              <span>Current: Cost ^~f EternityChallenge.getEternityChallengeReward(2) ~<span ~style.display=EternityChallenge.isEternityChallengeCompleted(2) ? 'none' : ''~>, Next: Cost ^~f EternityChallenge.getEternityChallengeNextReward(2) ~</span></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(3)~>
              <span>Eternity Challenge ~o 3 ~</span>
              <br/>
              <span>You can't prestige.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(3) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(3) ~ theorem~s EternityChallenge.getEternityChallengeCost(3) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(3) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(3) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(3) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(3)">~r EternityChallenge.eternityChallengeButtonText(3) ~</button></span>
              <br/>
              <span>Reward: Exponent to prestige power.</span>
              <br/>
              <span>Current: ^~r formatPrecisely(EternityChallenge.getEternityChallengeReward(3)) ~<span ~style.display=EternityChallenge.isEternityChallengeCompleted(3) ? 'none' : ''~>, Next: ^~r formatPrecisely(EternityChallenge.getEternityChallengeNextReward(3)) ~</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(4)~>
              <span>Eternity Challenge ~o 4 ~</span>
              <br/>
              <span>You can infinity at most ~i EternityChallenge.eternityChallenge4AllowedInfinities() ~ time~s EternityChallenge.eternityChallenge4AllowedInfinities() ~. If you infinity more, you will automatically exit this challenge.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(4) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(4) ~ theorem~s EternityChallenge.getEternityChallengeCost(4) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(4) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(4) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(4) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(4)">~r EternityChallenge.eternityChallengeButtonText(4) ~</button></span>
              <br/>
              <span>Reward: Multiplier to infinity generators based on total infinity points produced this eternity.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(4) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(4) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(4) ~x</span></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(5)~>
              <span>Eternity Challenge ~o 5 ~</span>
              <br/>
              <span>Infinity generator multipliers are square-rooted (^~f 0.5 ~).</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(5) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(5) ~ theorem~s EternityChallenge.getEternityChallengeCost(5) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(5) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(5) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(5) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(5)">~r EternityChallenge.eternityChallengeButtonText(5) ~</button></span>
              <br/>
              <span>Reward: Exponent to infinity generator multipliers.</span>
              <br/>
              <span>Current: ^~f EternityChallenge.getEternityChallengeReward(5) ~<span ~style.display=EternityChallenge.isEternityChallengeCompleted(5) ? 'none' : ''~>, Next: ^~f EternityChallenge.getEternityChallengeNextReward(5) ~</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(6)~>
              <span>Eternity Challenge ~o 6 ~</span>
              <br/>
              <span>All eternity challenge rewards are disabled.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(6) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(6) ~ theorem~s EternityChallenge.getEternityChallengeCost(6) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(6) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(6) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(6) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(6)">~r EternityChallenge.eternityChallengeButtonText(6) ~</button></span>
              <br/>
              <span>Reward: All other eternity challenge rewards are stronger.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(6) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(6) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(6) ~x</span></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(7)~>
              <span>Eternity Challenge ~o 7 ~</span>
              <br/>
              <span>Infinity generator per-purchase multipliers are disabled.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(7) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(7) ~ theorem~s EternityChallenge.getEternityChallengeCost(7) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(7) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(7) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(7) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(7)">~r EternityChallenge.eternityChallengeButtonText(7) ~</button></span>
              <br/>
              <span>Reward: Multiplier to infinity generators based on eternity points produced this complexity.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(7) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(7) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(7) ~x</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(8)~>
              <span>Eternity Challenge ~o 8 ~</span>
              <br/>
              <span>Eternity generators are disabled.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(8) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(8) ~ theorem~s EternityChallenge.getEternityChallengeCost(8) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(8) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(8) ~</span>
              <br/>
              <span><button ~class=EternityChallenge.canPressEternityChallengeButton(8) ? '' : 'disabled'~ onclick="EternityChallenge.pressEternityChallengeButton(8)">~r EternityChallenge.eternityChallengeButtonText(8) ~</button></span>
              <br/>
              <span>Reward: Multiplier to eternity generators.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(8) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(8) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(8) ~x</span></span>
            </div>
          </td>
        </tr>
      </table>
      <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
        <span>
          You can only have a single eternity challenge unlocked at a given time.
        </span>
        <br/>
        <span>
          Eternity challenges lock again once completed.
        </span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'chroma' ? '' : 'none'~>
      <div ~style.display=Chroma.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Chroma.unlockColor(1)" ~class=Chroma.canUnlockColor(1) ? '' : 'disabled'~>
          Unlock Chroma<br/>Cost: ~f Chroma.getUnlockColorCost(1) ~ eternity points
        </button>
      </div>
      <div ~style.display=(Chroma.isUnlocked() || Options.showAllTabs()) ? '' : 'none'~>
        <div ~style.display=Chroma.isUnlocked() ? 'none' : ''~>
          <br/>
          <span>Note that you cannot gain chroma before you unlock any color of it, and ~r Chroma.colorName(1) ~ must be the first color you unlock.</span>
          <br/>
          <br/>
        </div>
        <span>You have spent ~t player.stats.timeSinceEternity ~ in this eternity, giving you ~f Chroma.displayAmount() ~ chroma (capped at ~f Chroma.cap() ~, based on eternity points).</span>
        <br/>
        <span>Chroma gain will slow down over time, gradually approaching its cap but taking a very long time to reach it.</span>
        <br/>
        <span ~style.display=(Chroma.isUnlocked() && !Chroma.producingAll()) ? '' : 'none'~>You ~r Chroma.currentProductionTextPrefix() ~<span ~class=Chroma.currentColorClass()~>~r Chroma.currentColorName() ~</span>~r Chroma.currentProductionTextSuffix() ~, and will produce <span ~class=Chroma.nextColorClass()~>~r Chroma.nextColorName() ~</span> after next eternity reset.</span>
        <br ~style.display=(Chroma.isUnlocked() && !Chroma.producingAll()) ? '' : 'none'~/>
        <span>You ~r Chroma.timeForChromaTextPrefix() ~ <input type="text" class="chroma-value" ~!value=NotationOptions.format('chroma-value')~ ~!onchange=function() {Chroma.setTimeForChromaValue(NotationOptions.read('chroma-value', this.value))}~></input> <select ~!value=Chroma.timeForChromaMode()~ ~!onchange=function() {Chroma.setTimeForChromaMode(this.value)}~>
          <option value="chroma">chroma</option>
          <option value="fraction of chroma cap">fraction of chroma cap</option>
        </select>~r Chroma.timeForChromaTextSuffix() ~.</span>
        <br/>
        <span>
          <span ~style.display=Chroma.producingAll() ? 'none' : ''~>The value of whatever color you are producing is</span>
          <span ~style.display=Chroma.producingAll() ? '' : 'none'~>The values of all colors are</span>
          constantly increased to your current chroma.</span>
        </span>
        <br/>
        <span>All sources of chroma buildup speed act retroactively in the current eternity.</span>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 8px 0px; border-collapse: separate;">
          <tr>
            <td>
              <div ~class=Chroma.chromaDivClass(1)~ ~style.display=Chroma.canSeeThatColorExists(1) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(1) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(1)" ~class=Chroma.canUnlockColor(1) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(1) ~<br/>Cost: ~f Chroma.getUnlockColorCost(1) ~ eternity points
                  </button>
                </div>
                <div class="greydiv" ~style.display=Chroma.isColorUnlocked(1) ? '' : 'none'~>
                  <span>~r Chroma.colorName(1, true) ~: ~f Chroma.colorAmount(1) ~</span>
                  <br/>
                  <span>Multiplier per boost ~f Chroma.effectOfColor(1) ~x</span>
                  <br/>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(1)">Produce ~r Chroma.colorName(1) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(1) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(2)~ ~style.display=Chroma.canSeeThatColorExists(2) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(2) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(2)" ~class=Chroma.canUnlockColor(2) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(2) ~<br/>Cost: ~f Chroma.getUnlockColorCost(2) ~ eternity points
                  </button>
                </div>
                <div class="purplediv" ~style.display=Chroma.isColorUnlocked(2) ? '' : 'none'~>
                  <span>~r Chroma.colorName(2, true) ~: ~f Chroma.colorAmount(2) ~</span>
                  <br/>
                  <span>Eternity gain ~f Chroma.effectOfColor(2) ~x</span>
                  <br/>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(2)">Produce ~r Chroma.colorName(2) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(2) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(3)~ ~style.display=Chroma.canSeeThatColorExists(3) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(3) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(3)" ~class=Chroma.canUnlockColor(3) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(3) ~<br/>Cost: ~f Chroma.getUnlockColorCost(3) ~ eternity points
                  </button>
                </div>
                <div class="orangediv" ~style.display=Chroma.isColorUnlocked(3) ? '' : 'none'~>
                  <span>~r Chroma.colorName(3, true) ~: ~f Chroma.colorAmount(3) ~</span>
                  <br/>
                  <span>Chroma buildup speed ~f Chroma.effectOfColor(3) ~x</span>
                  <br/>
                  <span>(based on total EP this complexity)</span>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(3)">Produce ~r Chroma.colorName(3) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(3) ~</span>
                </div>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div ~class=Chroma.chromaDivClass(4)~ ~style.display=Chroma.canSeeThatColorExists(4) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(4) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(4)" ~class=Chroma.canUnlockColor(4) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(4) ~<br/>Cost: ~f Chroma.getUnlockColorCost(4) ~ eternity points
                  </button>
                </div>
                <div class="cyandiv" ~style.display=Chroma.isColorUnlocked(4) ? '' : 'none'~>
                  <span>~r Chroma.colorName(4, true) ~: ~f Chroma.colorAmount(4) ~</span>
                  <br/>
                  <span>Eternity Generator ~o 8 ~<span> </span>~f Chroma.effectOfColor(4) ~x</span>
                  <br/>
                  <span>(based on Eternity Generator ~o 8 ~ amount)</span>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(4)">Produce ~r Chroma.colorName(4) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(4) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(5)~ ~style.display=Chroma.canSeeThatColorExists(5) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(5) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(5)" ~class=Chroma.canUnlockColor(5) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(5) ~<br/>Cost: ~f Chroma.getUnlockColorCost(5) ~ eternity points
                  </button>
                </div>
                <div class="greendiv" ~style.display=Chroma.isColorUnlocked(5) ? '' : 'none'~>
                  <span>~r Chroma.colorName(5, true) ~: ~f Chroma.colorAmount(5) ~</span>
                  <br/>
                  <span>~i Chroma.extraTheoremsActualAndDisplay() ~ extra theorem~s Chroma.extraTheoremsActualAndDisplay() ~, next at ~f Chroma.nextExtraTheorem() ~</span>
                  <br/>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(5)">Produce ~r Chroma.colorName(5) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(5) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(6)~ ~style.display=Chroma.canSeeThatColorExists(6) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(6) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(6)" ~class=Chroma.canUnlockColor(6) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(6) ~<br/>Cost: ~f Chroma.getUnlockColorCost(6) ~ eternity points
                  </button>
                </div>
                <div class="reddiv" ~style.display=Chroma.isColorUnlocked(6) ? '' : 'none'~>
                  <span>~r Chroma.colorName(6, true) ~: ~f Chroma.colorAmount(6) ~</span>
                  <br/>
                  <span>Multiplier softcap ^~f Chroma.effectOfColor(6) ~</span>
                  <br/>
                  <span>(based on eternities this complexity)</span>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(6)">Produce ~r Chroma.colorName(6) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(6) ~</span>
                </div>
              </div>
            </td>
          </tr>
        </table>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'complexity' ? '' : 'none'~>
      <span>You have ~i ComplexityPoints.amount() ~ complexity point~s ComplexityPoints.amount() ~ (ℂP).
        <button ~class=ComplexityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="ComplexityMaxAll.maxAll()">Max all</button>
      </span>
      <br/>
      <span>You have produced ~i ComplexityPoints.totalCPProducedThisFinality() ~ complexity point~s ComplexityPoints.totalCPProducedThisFinality() ~ this finality.</span>
      <br/>
      <span>You have ~i Complexities.amount() ~ complexit~y Complexities.amount() ~, multiplying all complexity generators (ℂGs) by ~q Complexities.complexityGeneratorMultiplier() ~,</span>
      <br/>
      <span>multiplying permanence and chroma buildup speed by ~q Complexities.permanenceAndChromaMultiplier() ~,</span>
      <br/>
      <span>and <span ~style.display=EternityChallenge.autoECFromComplexities() ? '' : 'none'~>auto-completing an EC tier every ~tq Complexities.autoECCompletionTime() ~</span><span ~style.display=EternityChallenge.autoECFromComplexities() ? 'none' : ''~>never auto-completing an EC tier</span><span ~style.display=EternityChallenge.autoECFromFinalities() ? '' : 'none'~> (actually one EC tier per ~tq EternityChallenge.autoECCompletionTime() ~ due to finalities)</span>.</span>
      <br/>
      <span ~style.display=Complexities.hasAutoECCompletionSpeedupFromFinalities() ? '' : 'none'~>After finality, EC tier auto-completion from complexities is ~i Complexities.autoECCompletionSpeedupFromFinalities() ~x faster.</span>
      <br/>
      <span>You have ~f ComplexityStars.amount() ~ complexity stars, making all complexity challenge rewards ~f ComplexityStars.complexityChallengeRewardMultiplier() ~x stronger.</span>
      <br/>
      <span>You are getting ~f ComplexityStars.perSecond() ~ complexity stars per second.</span>
      <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(9) ? '' : 'none'~>
        <span>You have ~f ComplexityStars.amount() ~^~f ComplexityStars.extraComplexityStarPower() ~ = ~f ComplexityStars.extraAmount() ~ hypercomplexity stars,</span>
        <br/>
        <span>used for Complexity Challenge ~o 6 ~ reward strength and complexity star factor.</span>
      </div>
      <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(9) ? 'none' : ''~/>
      <span>View all complexity generators even if they would be otherwise invisible: <input type="checkbox" ~!checked=Options.rawViewAllGenerators('complexity')~ ~!onchange=function() {Options.setRawViewAllGenerators('complexity', this.checked)}~></input></span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <loop i 1 8>
          <tr ~style.display=ComplexityGenerator(% @i %).isVisible() ? '' : 'none'~>
            <td>Complexity Generator ~o % @i % ~</td>
            <td>~f ComplexityGenerator(% @i %).amount() ~</td>
            <td>~f ComplexityGenerator(% @i %).perSecond() ~/s</td>
            <td>~f ComplexityGenerator(% @i %).multiplier() ~x</td>
            <td><button ~class=ComplexityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(% @i %).buy()">Cost: ~i ComplexityGenerator(% @i %).cost() ~ ℂP</button></td>
            <td><button ~class=ComplexityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(% @i %).buyMax()">Max</button></td>
            <td><button ~style.display=ComplexityAutobuyer(% @i %).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(% @i %).toggle()">Auto: ~r ComplexityAutobuyer(% @i %).isOn() ? "On" : "Off" ~</button></td>
          </tr>
        </loop>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'complexity-challenges' ? '' : 'none'~>
      <span>You have completed ~i ComplexityChallenge.getTotalComplexityChallengeCompletions() ~ complexity challenge tier~s ComplexityChallenge.getTotalComplexityChallengeCompletions() ~.</span>
      <br/>
      <span><button onclick="ComplexityChallenge.complexityReset(true, true)" ~class=ComplexityPrestigeLayer.canComplexity() ? "disabled" : ""~>Restart complexity and re-enter all complexity challenges<span ~style.display=ComplexityPrestigeLayer.canComplexity() ? '' : 'none'~> (disabled because you can complexity)</span></button></span>
      <br/>
      <span>You have ~i Complexities.amount() ~ complexit~y Complexities.amount() ~ (allowing you to enter ~i ComplexityChallenge.numberUnlocked() ~ complexity challenge~s ComplexityChallenge.numberUnlocked() ~).</span>
      <br/>
      <span>Complexity challenge rewards are currently ~f ComplexityStars.complexityChallengeRewardMultiplier() ~x stronger (from ~f ComplexityStars.amount() ~ complexity stars).</span>
      <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(9) ? '' : 'none'~/>
      <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(9) ? '' : 'none'~>The Complexity Challenge ~o 6 ~ reward is instead currently ~f ComplexityStars.complexityChallengeRewardMultiplier(6) ~x stronger (from ~f ComplexityStars.extraAmount() ~ hypercomplexity stars).</span>
      <br/>
      <span>Re-enable complexity challenges you're currently in on ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ <span class="helpspan">(?)<span class="tooltiptext" style="font-size: 0.75rem;">This means that if you're currently in a complexity challenge due to the ability to violate its condition being disabled, and you ~r PrestigeLayerProgress.hasReached('finality') ? 'complexity or finality' : 'complexity' ~, then the ability to violate that condition will be automatically enabled again, letting you exit the complexity challenge. This is often good since you don't want to do a complexity challenge for two complexities in a row, but it has
        <span ~style.display=(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? 'none' : ''~>a downside later in the game.</span><span ~style.display=(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>the downside that <span class="redspan">you will exit a complexity challenge if you, for example, unequip powers in it.</span></span>
      </span></span>: <input type="checkbox" ~!checked=Options.exitComplexityChallengesOnComplexity()~ ~!onchange=function() {Options.setExitComplexityChallengesOnComplexity(this.checked)}~></input></span>
      <br/>
      <br/>
      <span>You do not need to complexity to complete complexity challenges. <button ~style.display=Explanations.isVisible('complexity-challenges', 'main') ? '' : 'none'~ onclick="Explanations.showOrHide('complexity-challenges', 'main')">Complexity challenges explanation: ~r Explanations.isShown('complexity-challenges', 'main') ? 'Shown' : 'Hidden' ~</button></span>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Explanations.isShown('complexity-challenges', 'main') ? '' : 'none'~>
        <span>
          Being in a complexity challenge doesn't prevent you from violating its condition. Instead, violating the condition makes you exit the complexity challenge. Thus, you are automatically in whichever complexity challenges you have not yet violated the condition of this complexity. In particular, when starting a new complexity, you will be in all complexity challenges that you've unlocked at once.
        </span>
        <br/>
        <br/>
        <span ~style.display=Trivia.show('CC1 pre-complexity completion') ? '' : 'none'~>
          You can complete Complexity Challenge ~o 1 ~ even pre-complexity. This allows you to start with a Complexity Challenge ~o 1 ~ completion.
        </span>
        <br ~style.display=Trivia.show('CC1 pre-complexity completion') ? '' : 'none'~/>
        <br ~style.display=Trivia.show('CC1 pre-complexity completion') ? '' : 'none'~/>
        <span>
          The header does not mention that you are in Complexity Challenge ~o 1 ~ to avoid clutter, since you are always in it. The ability to disable certain things is there to prevent accidental violation of complexity challenge requirements.
        </span>
        <br/>
        <br/>
      </div>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="complexitychallengediv yellowaltereddiv" ~style.background=ComplexityChallenge.color(1)~>
              <span>Complexity Challenge ~o 1 ~</span>
              <br/>
              <span>No requirement (you're always in this challenge).</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(1) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(1) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(1) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(1) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(1) ? '' : 'none'~/>
              <span>Reward: Multiplier to normal generators based on stars.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(1) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(1) ~x</span>
            </div>
          </td>
          <td>
            <div class="complexitychallengediv greyaltereddiv" ~style.background=ComplexityChallenge.color(2)~>
              <span>Complexity Challenge ~o 2 ~</span>
              <br/>
              <span>You can't buy boosts.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(2) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(2) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(2) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(2) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(2) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(2)">Buying boosts: ~r ComplexityChallenge.safeguardStatusText(2) ~<span class="hyperredspan">~r ComplexityChallenge.safeguardRedText(2) ~</button></button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(2) ? 'none' : ''~ class="hyperredspan">(Disabling this doesn't put you in this challenge yet, since this challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(2) ? 'none' : ''~/>
              <span>Reward: Boosts are cheaper.</span>
              <br/>
              <span>Current: Cost ^~r formatPrecisely(ComplexityChallenge.getComplexityChallengeReward(2)) ~, Next: Cost ^~r formatPrecisely(ComplexityChallenge.getComplexityChallengeNextReward(2)) ~</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexitychallengediv purplealtereddiv" ~style.background=ComplexityChallenge.color(3)~>
              <span>Complexity Challenge ~o 3 ~</span>
              <br/>
              <span>You can't unlock the Eternity Producer (or get permanence).</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(3) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(3) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(3) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(3) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(3) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(3)">Unlocking the Eternity Producer: ~r ComplexityChallenge.safeguardStatusText(3) ~<span class="hyperredspan">~r ComplexityChallenge.safeguardRedText(3) ~</button></button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(3) ? 'none' : ''~ class="hyperredspan">(Disabling this doesn't put you in this challenge yet, since this challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(3) ? 'none' : ''~/>
              <span>Reward: Multiplier to eternity gain.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(3) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(3) ~x</span>
            </div>
          </td>
          <td>
            <div class="complexitychallengediv orangealtereddiv" ~style.background=ComplexityChallenge.color(4)~>
              <span>Complexity Challenge ~o 4 ~</span>
              <br/>
              <span>You can't unlock chroma.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(4) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(4) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(4) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(4) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(4) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(4)">Unlocking chroma and colors: ~r ComplexityChallenge.safeguardStatusText(4) ~<span class="hyperredspan">~r ComplexityChallenge.safeguardRedText(4) ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(4) ? 'none' : ''~ class="hyperredspan">(Disabling this doesn't put you in this challenge yet, since this challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(4) ? 'none' : ''~/>
              <span>Reward: Multiplier to chroma cap.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(4) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(4) ~x</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexitychallengediv cyanaltereddiv" ~style.background=ComplexityChallenge.color(5)~>
              <span>Complexity Challenge ~o 5 ~</span>
              <br/>
              <span>You can't buy Eternity Generator ~o 8 ~.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(5) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(5) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(5) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(5) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(5) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(5)">Buying Eternity Generator ~o 8 ~: ~r ComplexityChallenge.safeguardStatusText(5) ~<span class="hyperredspan">~r ComplexityChallenge.safeguardRedText(5) ~</span></button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(5) ? 'none' : ''~ class="hyperredspan">(Disabling this doesn't put you in this challenge yet, since this challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(5) ? 'none' : ''~/>
              <span>Reward: Multiplier to per-purchase Eternity Generator ~o 8 ~ multiplier.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(5) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(5) ~x</span>
            </div>
          </td>
          <td>
            <div class="complexitychallengediv greenaltereddiv" ~style.background=ComplexityChallenge.color(6)~>
              <span>Complexity Challenge ~o 6 ~</span>
              <br/>
              <span>You can't buy or have studies.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(6) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(6) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(6) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(6) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(6) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(6)">Buying studies: ~r ComplexityChallenge.safeguardStatusText(6) ~<span class="hyperredspan">~r ComplexityChallenge.safeguardRedText(6) ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(6) ? 'none' : ''~ class="hyperredspan">(Disabling this doesn't put you in this challenge yet, since this challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(6) ? 'none' : ''~/>
              <span ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) && ComplexityChallenge.isComplexityChallengeUnlocked(6)) ? '' : 'none'~>(Due to "On the other side", you also need to respec studies to enter this challenge. Disabling buying studies will respec studies on complexity.)</span>
              <br ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) && ComplexityChallenge.isComplexityChallengeUnlocked(6)) ? '' : 'none'~/>
              <span>Reward: Extra theorems.</span>
              <br/>
              <span>Current: +~i ComplexityChallenge.getComplexityChallengeReward(6) ~ theorem~s ComplexityChallenge.getComplexityChallengeReward(6) ~, Next: +~i ComplexityChallenge.getComplexityChallengeNextReward(6) ~</span>
              <br ~style.display=ComplexityChallenge.showActualExtraTheorems() ? '' : 'none'~/>
              <span ~style.display=ComplexityChallenge.showActualExtraTheorems() ? '' : 'none'~>(increased to +~i ComplexityChallenge.extraTheoremsActualAndDisplay() ~, from "On the other side")</span>
              <br ~style.display=ComplexityChallenge.extraComplexityStarsForNextExtraTheorem().neq(Infinity) ? '' : 'none'~/>
              <span ~style.display=ComplexityChallenge.extraComplexityStarsForNextExtraTheorem().neq(Infinity) ? '' : 'none'~>Next theorem at ~f ComplexityChallenge.extraComplexityStarsForNextExtraTheorem() ~ <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(9) ? '' : 'none'~>hyper</span>complexity stars.</span>
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'complexity-achievements' ? '' : 'none'~>
      <span>
        You have unlocked ~i ComplexityAchievements.getTotalAchievementsUnlocked() ~ complexity achievement~s ComplexityAchievements.getTotalAchievementsUnlocked() ~.
      </span>
      <br/>
      <span>
        <button ~style.display=(ComplexityAchievements.hasComplexityAchievement(1, 3) || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~ onclick="ComplexityAchievements.toggleAchievement(1, 3)">More colorful than a potato: ~r (ComplexityAchievements.isComplexityAchievementDisabled(1, 3) ? "Disabled" : "Enabled") + (ComplexityAchievements.hasComplexityAchievement(1, 3) ? '' : ' (once unlocked)') ~</button>
        <button ~style.display=(ComplexityChallenge.isComplexityChallengeUnlocked(4) || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~ onclick="Studies.toggleCanBuyGenerally()">Buying theorems <span class="helpspan">(?)<span class="tooltiptext">Disabling buying theorems can help to unlock "Thousand-theorem twilight".</span></span>: ~r (Studies.canBuyGenerally() ? "Enabled" : "Disabled") ~</button>
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(1)~>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(1) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(1)~>
         You start each ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ with EP equal to your highest-ever number of boosts (~i ComplexityAchievements.getAchievementsUnlockedRewardRawEffect(1) ~)
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(2)~>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(2) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(2)~>
        Multiplier to eternity gain based on complexity achievements unlocked (~q ComplexityAchievements.getAchievementsUnlockedRewardRawEffect(2) ~)
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(3)~>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(3) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(3)~>
        Unlock a new color of chroma.
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(4)~>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(4) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span ~class=ComplexityAchievements.getAchievementsUnlockedRewardClass(4)~>
        You start each ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ with ~f ComplexityAchievements.getAchievementsUnlockedRewardRawEffect(4) ~ EP, and you unlock a complexity autobuyer.
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 1)~>
              <span class="greytogreyaltered">~r ComplexityAchievements.getComplexityAchievementName(1, 1) ~</span>
              <br/>
              Complete Complexity Challenge ~o 2 ~<span> </span>~i 8 ~ times.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 1) ~
              <br/>
              The multiplier to permanence and chroma from complexities also applies to boost power (currently ~q ComplexityAchievements.rawEffect(1, 1) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 2)~>
              <span class="greytopurplealtered">~r ComplexityAchievements.getComplexityAchievementName(1, 2) ~</span>
              <br/>
              Eternity in Complexity Challenge ~o 2 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 2) ~
              <br/>
              You start each ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ with eternities based on your complexities (currently ~i ComplexityAchievements.rawEffect(1, 2) ~)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 3)~>
              <span class="greytoorangealtered">~r ComplexityAchievements.getComplexityAchievementName(1, 3) ~</span>
              <br/>
              Unlock chroma in Complexity Challenge ~o 2 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 3) ~
              <br/>
              Automatically unlock the Eternity Producer, chroma, and colors of chroma when possible.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 4)~>
              <span class="greytogreenaltered">~r ComplexityAchievements.getComplexityAchievementName(1, 4) ~</span>
              <br/>
              Get ~i 11 ~ studies in Complexity Challenge ~o 2 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 4) ~
              <br/>
              Power to fourth-row study effects based on per-boost multiplier (currently ^~f ComplexityAchievements.rawEffect(1, 4) ~)
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 1)~>
              <span class="purpletogreyaltered">~r ComplexityAchievements.getComplexityAchievementName(2, 1) ~</span>
              <br/>
              Get a per-boost multiplier of ~f Math.pow(2, 24) ~ outside of Infinity Challenge ~o 7 ~ in Complexity Challenge ~o 3 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 1) ~
              <br/>
              Multiplier to the per-boost multiplier based on eternities (currently ~f ComplexityAchievements.rawEffect(2, 1) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 2)~>
              <span class="purpletopurplealtered">~r ComplexityAchievements.getComplexityAchievementName(2, 2) ~</span>
              <br/>
              Get ~f Math.pow(2, 24) ~ eternities in Complexity Challenge ~o 3 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 2) ~
              <br/>
              You always have autobuyers for eternity upgrades, eternity generators, and Eternity Producer upgrades, and you get autobuyers for theorems, permanence, and permanence upgrades.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 3)~>
              <span class="purpletoorangealtered">~r ComplexityAchievements.getComplexityAchievementName(2, 3) ~</span>
              <br/>
              Unlock chroma in Complexity Challenge ~o 3 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 3) ~
              <br/>
              Multiplier to chroma buildup speed based on eternities (currently ~f ComplexityAchievements.rawEffect(2, 3) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 4)~>
              <span class="purpletogreenaltered">~r ComplexityAchievements.getComplexityAchievementName(2, 4) ~</span>
              <br/>
              Get ~i 231 ~ theorems in Complexity Challenge ~o 3 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 4) ~
              <br/>
              Study ~o 7 ~ and Study ~o 11 ~ effects are uncapped and raised ^~i ComplexityAchievements.rawEffect(2, 4) ~.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 1)~>
              <span class="orangetogreyaltered">~r ComplexityAchievements.getComplexityAchievementName(3, 1) ~</span>
              <br/>
              Get ~i 1024 ~ boosts in Eternity Challenge ~o 2 ~ in Complexity Challenge ~o 4 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 1) ~
              <br/>
              Grey chroma powers purple and orange chroma effects (currently ^~f ComplexityAchievements.rawEffect(3, 1) ~)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 2)~>
              <span class="orangetopurplealtered">~r ComplexityAchievements.getComplexityAchievementName(3, 2) ~</span>
              <br/>
              Complete all eternity challenges, without using automatic eternity challenge completion, in Complexity Challenge ~o 4 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 2) ~
              <br/>
              Eternity challenge requirements and costs are removed, and you can complete multiple eternity challenge tiers at once.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 3)~>
              <span class="orangetoorangealtered">~r ComplexityAchievements.getComplexityAchievementName(3, 3) ~</span>
              <br/>
              Complete Complexity Challenge ~o 4 ~<span> </span>~i 13 ~ times.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 3) ~
              <br/>
              Chroma always produces all unlocked colors at once.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 4)~>
              <span class="orangetogreenaltered">~r ComplexityAchievements.getComplexityAchievementName(3, 4) ~</span>
              <br/>
              Get ~f Decimal.pow(2, 1.75 * Math.pow(2, 16)) ~ eternity points, without buying theorems, in Complexity Challenge ~o 4 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 4) ~
              <br/>
              Extra theorems from green ^~f ComplexityAchievements.rawEffect(3, 4) ~.
              <br ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) && !ComplexityAchievements.hasComplexityAchievement(3, 4)) ? '' : 'none'~/>
              <span ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) && !ComplexityAchievements.hasComplexityAchievement(3, 4)) ? '' : 'none'~>(You can get this with bought theorems from previous complexities; only buying theorems in your current complexity stops you from getting it.)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 1)~>
              <span class="greentogreyaltered">~r ComplexityAchievements.getComplexityAchievementName(4, 1) ~</span>
              <br/>
              Get ~f Math.pow(2, 16) ~ boost power in Complexity Challenge ~o 6 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 1) ~
              <br/>
              Increase the per-purchase complexity generator multiplier based on best boost power (currently ~r formatPrecisely(ComplexityAchievements.rawEffect(4, 1)) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 2)~>
              <span class="greentopurplealtered">~r ComplexityAchievements.getComplexityAchievementName(4, 2) ~</span>
              <br/>
              Complete ~i 20 ~ eternity challenge tiers, without using automatic eternity challenge completion, in Complexity Challenge ~o 6 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 2) ~
              <br/>
              You start each ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ with all eternity challenges completed.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 3)~>
              <span class="greentoorangealtered">~r ComplexityAchievements.getComplexityAchievementName(4, 3) ~</span>
              <br/>
              Unlock chroma in Complexity Challenge ~o 6 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 3) ~
              <br/>
              Multiplier to chroma cap based on theorems (currently ~f ComplexityAchievements.rawEffect(4, 3) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 4)~>
              <span class="greentogreenaltered">~r ComplexityAchievements.getComplexityAchievementName(4, 4) ~</span>
              <br/>
              Get ~i 168 ~ theorems in Complexity Challenge ~o 6 ~.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 4) ~
              <br/>
              You keep your theorems, studies, and best boost power on complexity.
            </div>
          </td>
        </tr>
      </table>
      <span ~style.display=SpecialTabs.isTabVisible('powers') ? 'none' : ''~>Completing all complexity achievements for the first time will also let you view the Powers tab.</span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'powers' ? '' : 'none'~>
      <div ~style.display=Powers.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Powers.unlock()" ~class=Powers.canUnlock() ? '' : 'disabled'~>
          Unlock Powers<br/>Cost: ~f Powers.unlockCost() ~ complexity points
        </button>
        <div ~style.display=SpecialTabs.isTabVisible('oracle') ? 'none' : ''~>Unlocking powers for the first time will also let you view the Oracle tab.</div>
        <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(8) ? 'none' : ''~>Unlocking powers will also let you gain your eternity points on eternity every second, without needing to eternity (EP generation).</div>
      </div>
      <div ~style.display=(Powers.isUnlocked() || Options.showAllTabs()) ? '' : 'none'~>
        <div ~style.display=Powers.isUnlocked() ? 'none' : ''~>
          <br/>
          <span>Note that you cannot gain powers or buy power upgrades before you unlock powers.</span>
          <br/>
          <br/>
        </div>
        <span>You have ~i Powers.equipped().length ~/~i Powers.equippedLimit() ~ equipped power~s Powers.equippedLimit() ~. <button ~style.display=Explanations.isVisible('powers', 'main') ? '' : 'none'~ onclick="Explanations.showOrHide('powers', 'main')">Powers explanation: ~r Explanations.isShown('powers', 'main') ? 'Shown' : 'Hidden' ~</button></span>
        <br/>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Explanations.isShown('powers', 'main') ? '' : 'none'~>
          <span>Each power raises all of a generator type's multipliers to a power. Up to ~i Powers.equippedLimit() ~ power~s Powers.equippedLimit() ~ can be equipped at the same time.</span>
          <br/>
          <br/>
          <span>Note that the total multiplier of a power (basically strength times rarity times extra multiplier) is multiplied by a constant depending on type (~f 1 / 512 ~ for normal, ~f 1 / 32 ~ for infinity, ~f 1 / 16 ~ for eternity and complexity) before adding to the power that generator multipliers are raised to (this is because some generator types are more impactful than others).</span>
          <br/>
          <br/>
          <span>Powers are never destroyed unless you delete them, or unless they're automatically deleted as explained on this tab below stored powers. Powers can be equipped at any time as long as there is a free slot. If all power slots are full, to unequip a power and create a free slot you need to complexity.</span>
          <br/>
          <br/>
          <span>You start with ~i 1 ~ power of each type but get more over time. You can have multiple powers of the same type equipped.</span>
          <br/>
          <br/>
          <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(8) ? 'none' : ''~>Due to unlocking powers, you gain your eternity points on eternity every second, without needing to eternity (EP generation).</span>
          <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(8) ? 'none' : ''~/>
          <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(8) ? 'none' : ''~/>
        </div>
        <span ~style.display=Powers.isUnlocked() ? '' : 'none'~>You gain a new power once every ~t Powers.interval() ~, next in ~t Powers.timeUntilPowerGain() ~. <button onclick="Powers.togglePowerGain()">Power gain: ~r Powers.isPowerGainOn() ? "On" : "Off" ~</button></span>
        <span ~style.display=Powers.isUnlocked() ? 'none' : ''~>You would gain a new power once every ~t Powers.interval() ~, but you haven't unlocked them yet.</span>
        <br/>
        <span ~style.display=Powers.isPowerGainOn() || Powers.imminentPowerGain() === 0 ? '' : 'none'~>New powers can be stored up by turning power gain off. When it's turned on again you'll get all the new powers at once.</span>
        <span ~style.display=!Powers.isPowerGainOn() && Powers.imminentPowerGain() !== 0 ? '' : 'none'~>Turning power gain on would give you ~i Powers.imminentPowerGain() ~ new power~s Powers.imminentPowerGain() ~.</span>
        <br/>
        <span>New powers generally have a random type and random rarity.</span>
        <br/>
        <span>However, no two consecutive new powers can have the same type or both have a rarity in the bottom ~f RNG.lowRarityThreshold() ~ of rarities.</span>
        <br/>
        <div ~style.display=Powers.showNextPower() ? '' : 'none'~>
          <br/>
          <span>Next power<span ~style.display=Powers.nextKept() ? 'none' : ''~> (will be automatically deleted due to being bad enough to be useless)</span>:</span>
          <br/>
          <span ~class=Powers.color('next', 1)~>~r Powers.descriptionFull('next', 1) ~</span>
        </div>
        <br/>
        <span>The powers equipped by importing powers will be the strongest stored powers of the chosen types.</span>
        <br/>
        <div ~style.display=Options.showFullOptions('powers') ? 'none' : ''~>
          <button onclick="Powers.respecAndReset()" ~class=Powers.canRespec() ? "" : "disabled"~>Unequip equipped powers and ~r ComplexityPrestigeLayer.resetText() ~</button></button>
          <div style="width: 1024px; margin-left: auto; margin-right: auto;">
            <span>There are a lot of power options. To see the others, go to the options tab and toggle (turn on) "Full power options" in the "other options" part.</span>
          </div>
        </div>
        <div ~style.display=Options.showFullOptions('powers') ? '' : 'none'~>
          <button class="powers-export-button" onclick="Powers.export()">Export equipped powers</button> <button onclick="Powers.import()">Import equipped powers</button>
          <button onclick="Powers.toggleRespec()">Unequip equipped powers on next complexity: ~r Powers.isRespecOn() ? "On" : "Off" ~</button>
          <br/>
          <button onclick="Powers.respecAndReset()" ~class=Powers.canRespec() ? "" : "disabled"~>Unequip equipped powers and ~r ComplexityPrestigeLayer.resetText() ~</button>
          <br ~style.display=Powers.canAutoEquippedSwap() ? 'none' : ''~/>
          <button onclick="Powers.equippedSwap(true)" ~class=Powers.canEquippedSwap() ? "" : "disabled"~ ~style.display=Powers.canAutoEquippedSwap() ? 'none' : ''~>
            Swap your equipped powers with better stored powers of the same type and ~r ComplexityPrestigeLayer.resetText() ~
          </button>
          <div style="width: 1024px; margin-left: auto; margin-right: auto;">
            <span>There are a lot of power options. To hide most of them, go to the options tab and toggle (turn off) "Full power options" in the "other options" part.</span>
          </div>
        </div>
        <br/>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <div ~style.display=Options.showFullOptions('powers') ? '' : 'none'~>
            <button onclick="Powers.togglePresetRespec()">Unequip equipped powers when loading a preset: ~r Powers.presetRespec() ? "On" : "Off" ~  (reversed when holding shift)</button>
          </div>
          <span>Click on the name of a power preset on the line below to equip those powers:</span>
          <br/>
          <loop i 1 32>
            <button ~class=Powers.presetClass(% @i %)~ ~style.display=Powers.hasPreset(% @i %) ? '' : 'none'~ onclick="Powers.presetLoad(% @i %)">~r Powers.presetName(% @i %) ~</button>
          </loop>
          <div ~style.display=Powers.hasPreset(1) ? 'none' : ''~>
            You don't currently have any power presets. You can create presets at the bottom of this tab.
          </div>
        </div>
        <div ~style.display=Powers.isAutoLoadUnlocked() ? '' : 'none'~>
          Equipped powers to constantly load: <input style="width: 256px;" type="text" ~!value=Powers.powerListToAutoLoad()~ ~!onchange=function() {Powers.setPowerListToAutoLoad(this.value)}~></input> <button onclick="Powers.toggleAutoLoad()">Auto-load: ~r Powers.isAutoLoadOn() ? "On" : "Off" ~</button>
        </div>
        <br/>
        <span>Equipped powers:</span>
        <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
          <tr>
            <td class="mediumpowertd">
              <div ~style.display=Powers.canAccessPower('equipped', 1) ? '' : 'none'~>
                <span ~class=Powers.color('equipped', 1)~>~r Powers.descriptionFullEffect('equipped', 1) ~</span>
                <br/>
                <span ~class=Powers.color('equipped', 1)~>~r Powers.descriptionStrengthRarity('equipped', 1) ~</span>
                <br/>
                <span ~class=Powers.color('equipped', 1)~>~r Powers.descriptionMultiplier('equipped', 1) ~</span>
                <br/>
                <button onclick="Powers.unequip(1)" ~class=Powers.canUnequip(1) ? '' : 'disabled'~>Unequip</button>
              </div>
            </td>
            <td class="mediumpowertd">
              <div ~style.display=Powers.canAccessPower('equipped', 2) ? '' : 'none'~>
                <span ~class=Powers.color('equipped', 2)~>~r Powers.descriptionFullEffect('equipped', 2) ~</span>
                <br/>
                <span ~class=Powers.color('equipped', 2)~>~r Powers.descriptionStrengthRarity('equipped', 2) ~</span>
                <br/>
                <span ~class=Powers.color('equipped', 2)~>~r Powers.descriptionMultiplier('equipped', 2) ~</span>
                <br/>
                <button onclick="Powers.unequip(2)" ~class=Powers.canUnequip(2) ? '' : 'disabled'~>Unequip</button>
              </div>
            </td>
            <td class="mediumpowertd">
              <div ~style.display=Powers.canAccessPower('equipped', 3) ? '' : 'none'~>
                <span ~class=Powers.color('equipped', 3)~>~r Powers.descriptionFullEffect('equipped', 3) ~</span>
                <br/>
                <span ~class=Powers.color('equipped', 3)~>~r Powers.descriptionStrengthRarity('equipped', 3) ~</span>
                <br/>
                <span ~class=Powers.color('equipped', 3)~>~r Powers.descriptionMultiplier('equipped', 3) ~</span>
                <br/>
                <button onclick="Powers.unequip(3)" ~class=Powers.canUnequip(3) ? '' : 'disabled'~>Unequip</button>
              </div>
            </td>
          </tr>
        </table>
        <span>Current effects of equipped powers:</span>
        <br/>
        <span style="margin-left: 19px;" class="yellowalteredspan">~r Powers.totalEffectDescription('normal') ~</span>
        <br/>
        <span class="magentaalteredspan">~r Powers.totalEffectDescription('infinity') ~</span>
        <br/>
        <span class="cyanalteredspan">~r Powers.totalEffectDescription('eternity') ~</span>
        <br/>
        <span style="margin-left: -19px;" class="brownalteredspan">~r Powers.totalEffectDescription('complexity') ~</span>
        <br/>
        <br/>
        <span>Stored powers:</span>
        <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
          <tr>
            <td class="largepowertd">
              <span class="yellowalteredspan">Normal</span>
              <br/>
              <span class="yellowalteredspan">No extra multiplier</span>
              <br/>
              <br/>
              <br/>
            </td>
            <td class="largepowertd">
              <span class="magentaalteredspan">Infinity</span>
              <br/>
              <span class="magentaalteredspan">Extra multiplier from infinity stars</span>
              <br/>
              <br/>
              <span class="magentaalteredspan">~f Powers.getExtraMultiplier('infinity') ~x</span>
            </td>
            <td class="largepowertd">
              <span class="cyanalteredspan">Eternity</span>
              <br/>
              <span class="cyanalteredspan">Extra multiplier from complexity stars and time in complexity</span>
              <br/>
              <span class="cyanalteredspan">~f Powers.getExtraMultiplier('eternity') ~x <span ~style.display=Powers.isTypeAtCap('eternity') ? '' : 'none'~>(capped in ~t Powers.timeForTypeAtCap('eternity') ~)</span><span ~style.display=Powers.isTypeAtCap('eternity') ? 'none' : ''~>(caps at ~i 3 ~x in ~t Powers.timeForTypeAtCap('eternity') ~)</span></span>
            </td>
            <td class="largepowertd">
              <span class="brownalteredspan">Complexity</span>
              <br/>
              <span class="brownalteredspan">Extra multiplier from total strength and rarity of equipped powers</span>
              <br/>
              <span class="brownalteredspan">~f Powers.getExtraMultiplier('complexity') ~x</span>
            </td>
          </tr>
          <loop i 0 2>
            <tr>
              <loop j 1 4>
                <td class="largepowertd">
                  <div ~style.display=Powers.canAccessPower('stored', % 4 * @i + @j %) ? '' : 'none'~>
                    <span ~class=Powers.color('stored', % 4 * @i + @j %)~>~r Powers.descriptionEffect('stored', % 4 * @i + @j %) ~ <button onclick="Powers.equip(% 4 * @i + @j %)" ~class=Powers.canEquip(% 4 * @i + @j %) ? '' : 'disabled'~>Equip</button></span>
                    <br/>
                    <span ~class=Powers.color('stored', % 4 * @i + @j %)~>~r Powers.descriptionStrengthRarity('stored', % 4 * @i + @j %) ~</span>
                    <br/>
                    <span ~class=Powers.color('stored', % 4 * @i + @j %)~>~r Powers.descriptionMultiplier('stored', % 4 * @i + @j %) ~</span>
                    <br/>
                    <button onclick="Powers.delete(% 4 * @i + @j %)" ~class=Powers.canDelete(% 4 * @i + @j %) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(% 4 * @i + @j %) ~ power shards)</button>
                  </div>
                </td>
              </loop>
            </tr>
          </loop>
        </table>
        <span>At most ~i Powers.maximumEquippedLimit() ~ power~s Powers.maximumEquippedLimit() ~ can be equipped at once.</span>
        <br/>
        <span>Thus, all but the best ~i Powers.maximumEquippedLimit() ~ power~s Powers.maximumEquippedLimit() ~ of each type are useless and are thus automatically deleted for power shards.</span>
        <br/>
        <span>The calculation of which powers are the best ~i Powers.maximumEquippedLimit() ~ counts both those equipped and stored, but powers are never deleted while equipped.</span>
        <br/>
        <br/>
        <span>You have ~i ComplexityPoints.amount() ~ complexity point~s ComplexityPoints.amount() ~. <button ~class=Powers.anythingToBuy() ? "" : "disabled"~ onclick="Powers.maxAll()">Max power upgrades</button></span>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
          <tr>
            <td>Strength of new powers:</td>
            <td><span ~style.display=PowerUpgrade(1).atDisplayBoughtLimit() ? 'none' : ''~>~r formatPrecisely(PowerUpgrade(1).effectDisplay()) ~ → ~r formatPrecisely(PowerUpgrade(1).nextEffectDisplay()) ~</span><span ~style.display=PowerUpgrade(1).atDisplayBoughtLimit() ? '' : 'none'~>~r formatPrecisely(PowerUpgrade(1).effectDisplay()) ~ (maxed)</span></td>
            <td><span ~style.display=PowerUpgrade(1).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(1).buy()">Cost: ~i PowerUpgrade(1).cost() ~ ℂP</button></span></td>
            <td><span ~style.display=PowerUpgrade(1).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(1).buyMax()">Max</button></span></td>
            <td><span ~style.display=ComplexityAutobuyer(9).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(9).toggle()">Auto: ~r ComplexityAutobuyer(9).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
          <tr>
            <td>Speed of gaining new powers:</td>
            <td><span ~style.display=PowerUpgrade(2).atDisplayBoughtLimit() ? 'none' : ''~>~f PowerUpgrade(2).effectDisplay() ~x → ~f PowerUpgrade(2).nextEffectDisplay() ~x</span><span ~style.display=PowerUpgrade(2).atDisplayBoughtLimit() ? '' : 'none'~>~f PowerUpgrade(2).effectDisplay() ~x (maxed)</span></td>
            <td><span ~style.display=PowerUpgrade(2).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(2).buy()">Cost: ~i PowerUpgrade(2).cost() ~ ℂP</button></span></td>
            <td><span ~style.display=PowerUpgrade(2).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(2).buyMax()">Max</button></span></td>
            <td><span ~style.display=ComplexityAutobuyer(10).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(10).toggle()">Auto: ~r ComplexityAutobuyer(10).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
          <tr>
            <td>Minimum rarity of new powers:</td>
            <td><span ~style.display=PowerUpgrade(3).atDisplayBoughtLimit() ? 'none' : ''~>~f PowerUpgrade(3).effectDisplay() ~ → ~f PowerUpgrade(3).nextEffectDisplay() ~</span><span ~style.display=PowerUpgrade(3).atDisplayBoughtLimit() ? '' : 'none'~>~f PowerUpgrade(3).effectDisplay() ~ (maxed)</span></td>
            <td><span ~style.display=PowerUpgrade(3).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(3).buy()">Cost: ~i PowerUpgrade(3).cost() ~ ℂP</button></span></td>
            <td><span ~style.display=PowerUpgrade(3).atDisplayBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(3).buyMax()">Max</button></span></td>
            <td><span ~style.display=ComplexityAutobuyer(11).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(11).toggle()">Auto: ~r ComplexityAutobuyer(11).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
        </table>
        <br/>
        <div ~style.display=PowerShards.hasGainedShards() ? 'none' : ''~>
          <span>Power shards can be used to buy upgrades that give powers small additional multipliers, and to craft new powers.</span>
          <br/>
          <span>It is generally not recommended to delete any of your first few powers to get power shards.</span>
        </div>
        <div ~style.display=PowerShards.hasGainedShards() ? '' : 'none'~>
          <span>You have ~f PowerShards.amount() ~ power shards. <button ~class=PowerShards.anythingToBuy() ? "" : "disabled"~ onclick="PowerShards.maxAll()">Max power shard upgrades</button></span>
          <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
            <tr>
              <td class="yellowspan">Additional multiplier to normal generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(1).effect() ~ → +~f PowerShardUpgrade(1).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(1).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(1).buy()">Cost: ~i PowerShardUpgrade(1).cost() ~ power shard~s PowerShardUpgrade(1).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(1).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(12).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(12).toggle()">Auto: ~r ComplexityAutobuyer(12).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td class="magentaspan">Additional multiplier to infinity generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(2).effect() ~ → +~f PowerShardUpgrade(2).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(2).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(2).buy()">Cost: ~i PowerShardUpgrade(2).cost() ~ power shard~s PowerShardUpgrade(2).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(2).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(13).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(13).toggle()">Auto: ~r ComplexityAutobuyer(13).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td class="cyanspan">Additional multiplier to eternity generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(3).effect() ~ → +~f PowerShardUpgrade(3).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(3).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(3).buy()">Cost: ~i PowerShardUpgrade(3).cost() ~ power shard~s PowerShardUpgrade(3).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(3).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(14).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(14).toggle()">Auto: ~r ComplexityAutobuyer(14).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td class="brownspan">Additional multiplier to complexity generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(4).effect() ~ → +~f PowerShardUpgrade(4).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(4).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(4).buy()">Cost: ~i PowerShardUpgrade(4).cost() ~ power shard~s PowerShardUpgrade(4).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(4).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(15).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(15).toggle()">Auto: ~r ComplexityAutobuyer(15).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
          </table>
          <span>Power shard upgrade multipliers take effect after power and rarity, but before extra multipliers.</span>
          <br/>
          <br/>
          <span>Craft a power with type <select ~!value=PowerShards.craftedType()~ ~!onchange=function() {PowerShards.setCraftedType(this.value)}~>
            <option value="normal">normal</option>
            <option value="infinity">infinity</option>
            <option value="eternity">eternity</option>
            <option value="complexity">complexity</option>
          </select>,
          strength ~r formatPrecisely(PowerShards.craftedStrength()) ~, and rarity <input type="text" class="craft-rarity" ~!value=NotationOptions.format('craft-rarity')~ ~!onchange=function() {PowerShards.setCraftedRarity(NotationOptions.read('craft-rarity', this.value))}~></input>:
          <br/>
          <button ~class=PowerShards.canCraftAny() ? '' : 'disabled'~ onclick="PowerShards.setCraftRarityToMax()">Set craft rarity to maximum possible (~r PowerShards.maxCraftRarityText() ~)</button></span>
          <button ~class=PowerShards.canCraft() ? '' : 'disabled'~ onclick="PowerShards.craft()">Cost: ~f PowerShards.craftedPowerCost() ~ power shards</button></span>
          <br/>
          <span>You cannot craft powers with negative rarity or powers with rarity greater than ~f Powers.maximumRarity() ~ (the maximum rarity of generated powers).</span>
          <br/>
          <span>Crafting cost depends only on rarity (not on type), and is always at least twice the power shards gained from deletion.</span>
          <br/>
          <br/>
          <span>Crafted power<span ~style.display=Powers.craftedKept() ? 'none' : ''~> (will be automatically deleted due to being bad enough to be useless)</span>:</span>
          <br/>
          <span ~class=Powers.color('crafted', 1)~>~r Powers.descriptionFull('crafted', 1) ~</span>
        </div>
        <br/>
        <span>Power presets (<button onclick="Powers.presetSort()">sort by name</button>):</span>
        <br/>
        <loop i 1 32>
          <div ~style.display=Powers.hasPreset(% @i %) ? '' : 'none'~>
            Name: <input class="presetpowername% @i %" type="text" ~!value=Powers.presetName(% @i %)~ ~!onchange=function() {Powers.setPresetName(% @i %, this.value)}~></input>
            Powers: <input class="presetpowerlist% @i %" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(% @i %)~ ~!onchange=function() {Powers.setPresetPowerList(% @i %, this.value)}~></input>
            <button % (@i === 1) ? 'class="disabled" ' : '' %onclick="Powers.presetMoveUp(% @i %)">↑</button>
            <button % (@i === 32) ? `class="disabled"` : `~class=Powers.hasPreset(${@i + 1}) ? "" : "disabled"~` % onclick="Powers.presetMoveDown(% @i %)">↓</button>
            <button onclick="Powers.presetLoad(% @i %)">Load</button>
            <button onclick="Powers.presetSetToCurrentPowers(% @i %)">Change to current equipped powers</button>
            <button onclick="Powers.presetDelete(% @i %)">Delete</button>
          </div>
        </loop>
        <span>
          <button ~style.display=Powers.hasPreset(32) ? 'none' : ''~ onclick="Powers.presetCreate()">Create a power preset</button>
          <span ~style.display=Powers.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ power presets. Delete existing presets to create more.</span>
        </span>
        <br/>
        <span style="display: none;">Exported equipped powers (also copied to clipboard): <input id="powers-export-output"></input></span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'oracle' ? '' : 'none'~>
      <div ~style.display=Oracle.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Oracle.unlock()" ~class=Oracle.canUnlock() ? '' : 'disabled'~>
          Unlock the Oracle<br/>Cost: ~f Oracle.unlockCost() ~ complexity points
        </button>
        <div>The Oracle is a quality-of-life feature that will let you see the future.</div>
        <div ~style.display=SpecialTabs.isTabVisible('galaxies') ?  'none' : ''~>Unlocking the Oracle for the first time will also let you view the Galaxies tab.</div>
      </div>
      <div ~style.display=(Oracle.isUnlocked() || Options.showAllTabs()) ? '' : 'none'~>
        <div ~style.display=Oracle.isUnlocked() ? 'none' : ''~>
          <br/>
          <span>Note that you cannot get a prediction from the Oracle before you unlock the Oracle.</span>
          <br/>
          <br/>
        </div>
        <span>The Oracle lets you see what certain stats will be and what powers you will gain in the future.</span>
        <br/>
        <span>It can also be used to see what powers you would gain with power gain on.</span>
        <br/>
        <span>Ask the Oracle to look <input type="text" class="oracle-display-time" ~!value=NotationOptions.format('oracle-display-time')~ ~!onchange=function() {Oracle.setTime(NotationOptions.read('oracle-display-time', this.value))}~></input> second~s Oracle.displayTime() ~ into the future, using <input type="text" class="oracle-display-ticks" ~!value=NotationOptions.format('oracle-display-ticks')~ ~!onchange=function() {Oracle.setTicks(NotationOptions.read('oracle-display-ticks', this.value))}~></input> game tick~s Oracle.displayTicks() ~.</span>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <button ~class=Oracle.isUnlocked() ? '' : 'disabled'~ onclick="Oracle.invoke()">Get prediction</button> <button onclick="Oracle.toggleAlert()">Alert on prediction: ~r Oracle.alert() ? "On" : "Off" ~</button> <button onclick="Oracle.togglePowerDisplay()">Show future powers on prediction: ~r Oracle.powerDisplay() ? "On" : "Off" ~</button>
          <button onclick="Oracle.nextPowerGainInPredictions()">Power gain in predictions: ~r Oracle.powerGainInPredictions() ~</button>
          <button onclick="Oracle.togglePowerFutureExtraMultipliers()">Show future power extra multipliers (as opposed to current): ~r Oracle.powerFutureExtraMultipliers() ? "On" : "Off" ~</button>
          <span class="helpspan">(?)<span class="tooltiptext">The amounts of times shown until powers in predictions use the current actual rate of new powers, rather than the rate in the simulation. The current actual rate may sometimes be less accurate than the rate in the simulation due to upgrades, but it's generally more accurate at, for example, letting you know if you already have a certain power or not.</span></span>
        </div>
        <span>The Oracle can look between ~ti 0 ~ and ~ti Oracle.maxTime() ~ into the future,</span>
        <br/>
        <span>and can use between ~i 1 ~ and ~f Oracle.maxTicks() ~ game ticks (more than ~f Oracle.defaultTicks() ~ ticks may make it slow).</span>
        <br/>
        <span>You can press O to get a prediction from the Oracle on any tab.</span>
        <br/>
        <br/>
        <span>~r Oracle.messagePrequel() ~</span>
        <div class="oraclediv" ~style.display=Oracle.isUsed() ? '' : 'none'~>~r Oracle.message() ~</div>
        <br/>
        <br/>
        <div ~style.display=(Oracle.isUsed() && Oracle.powerDisplay()) ? '' : 'none'~>
          <span>Equipped powers from the future:</span>
          <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
            <tr>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle-equipped', 1) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle-equipped', 1)~>~r Powers.descriptionFullEffect('oracle-equipped', 1) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle-equipped', 1)~>~r Powers.descriptionStrengthRarity('oracle-equipped', 1) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle-equipped', 1)~>~r Powers.descriptionMultiplier('oracle-equipped', 1) ~</span>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle-equipped', 2) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle-equipped', 2)~>~r Powers.descriptionFullEffect('oracle-equipped', 2) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle-equipped', 2)~>~r Powers.descriptionStrengthRarity('oracle-equipped', 2) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle-equipped', 2)~>~r Powers.descriptionMultiplier('oracle-equipped', 2) ~</span>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle-equipped', 3) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle-equipped', 3)~>~r Powers.descriptionFullEffect('oracle-equipped', 3) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle-equipped', 3)~>~r Powers.descriptionStrengthRarity('oracle-equipped', 3) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle-equipped', 3)~>~r Powers.descriptionMultiplier('oracle-equipped', 3) ~</span>
                </div>
              </td>
            </tr>
          </table>
          <br/>
          <span>Stored powers from the future:</span>
          <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
            <tr>
              <td class="largepowertd">
                <span class="yellowalteredspan">Normal</span>
                <br/>
                <span class="yellowalteredspan">No extra multiplier</span>
                <br/>
                <br/>
                <br/>
              </td>
              <td class="largepowertd">
                <span class="magentaalteredspan">Infinity</span>
                <br/>
                <span class="magentaalteredspan">Extra multiplier from infinity stars</span>
                <br/>
                <br/>
                <span class="magentaalteredspan">~f Powers.getExtraMultiplier('infinity', true) ~x</span>
              </td>
              <td class="largepowertd">
                <span class="cyanalteredspan">Eternity</span>
                <br/>
                <span class="cyanalteredspan">Extra multiplier from complexity stars and time in complexity</span>
                <br/>
                <span class="cyanalteredspan">~f Powers.getExtraMultiplier('eternity', true) ~x <span ~style.display=Powers.isTypeAtCap('eternity', true) ? '' : 'none'~>(capped in ~t Powers.timeForTypeAtCap('eternity', true) ~)</span><span ~style.display=Powers.isTypeAtCap('eternity', true) ? 'none' : ''~>(caps at ~i 3 ~x in ~t Powers.timeForTypeAtCap('eternity', true) ~)</span></span>
              </td>
              <td class="largepowertd">
                <span class="brownalteredspan">Complexity</span>
                <br/>
                <span class="brownalteredspan">Extra multiplier from total strength and rarity of equipped powers</span>
                <br/>
                <span class="brownalteredspan">~f Powers.getExtraMultiplier('complexity', true) ~x</span>
              </td>
            </tr>
            <loop i 0 2>
              <tr>
                <loop j 1 4>
                  <td class="mediumpowertd">
                    <div ~style.display=Powers.canAccessPower('oracle', % 4 * @i + @j %) ? '' : 'none'~>
                      <span ~class=Powers.color('oracle', % 4 * @i + @j %)~>~r Powers.descriptionEffect('oracle', % 4 * @i + @j %) ~</span>
                      <br/>
                      <span ~class=Powers.color('oracle', % 4 * @i + @j %)~>~r Powers.descriptionStrengthRarity('oracle', % 4 * @i + @j %) ~</span>
                      <br/>
                      <span ~class=Powers.color('oracle', % 4 * @i + @j %)~>~r Powers.descriptionMultiplier('oracle', % 4 * @i + @j %) ~</span>
                      <br/>
                      <span ~class=Powers.color('oracle', % 4 * @i + @j %)~>~r Powers.descriptionWait('oracle', % 4 * @i + @j %) ~</span>
                    </div>
                  </td>
                </loop>
              </tr>
            </loop>
          </table>
        </div>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'galaxies' ? '' : 'none'~>
      <div ~style.display=Galaxy.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Galaxy.unlock()" ~class=Galaxy.canUnlock() ? '' : 'disabled'~>
          Unlock Galaxies<br/>Cost: ~f Galaxy.unlockCost() ~ complexity points
        </button>
        <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(2) ? 'none' : ''~>Unlocking galaxies will also give you autobuyers for complexity generators and power upgrades.</div>
      </div>
      <div ~style.display=(Galaxy.isUnlocked() || Options.showAllTabs()) ? '' : 'none'~>
        <div ~style.display=Galaxy.isUnlocked() ? 'none' : ''~>
          <br/>
          <span>Note that you cannot get any galaxies before galaxies are unlocked.</span>
          <br/>
          <br/>
        </div>
        <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(2) ? 'none' : ''~>Due to unlocking galaxies, you have autobuyers for complexity generators and power upgrades.</div>
        <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(2) ? 'none' : ''~/>
        <span>You have produced ~f Galaxy.totalStarsProducedThisFinality() ~ total stars this finality, making your star factor ~f Galaxy.starFactor() ~.</span>
        <br/>
        <span>You have produced ~f Galaxy.totalInfinityStarsProducedThisFinality() ~ total infinity stars this finality, making your infinity star factor ~f Galaxy.infinityStarFactor() ~.</span>
        <br/>
        <span>You have produced ~f Galaxy.totalEternityStarsProducedThisFinality() ~ total eternity stars this finality, making your eternity star factor ~f Galaxy.eternityStarFactor() ~.</span>
        <br/>
        <span>You have produced ~f Galaxy.totalComplexityStarsProducedThisFinality() ~ total <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(9) ? '' : 'none'~>hyper</span>complexity stars this finality, making your complexity star factor ~f Galaxy.complexityStarFactor() ~.</span>
        <br/>
        <span>Your stellar product is ~f Galaxy.starFactor() ~ x ~f Galaxy.infinityStarFactor() ~ x ~f Galaxy.eternityStarFactor() ~ x ~f Galaxy.complexityStarFactor() ~ = ~f Galaxy.stellarProduct() ~.</span>
        <br/>
        <br/>
        <span>You have ~i Galaxy.stellarProductAmount() ~ (from stellar product) + ~i Galaxy.complexityPointAmount() ~ (from total ℂP this finality) <span ~style.display=Galaxy.finalityShardUpgradeAmount() === 0 ? 'none' : ''~>+ ~i Galaxy.finalityShardUpgradeAmount() ~ (from finality shard upgrade bonuses)</span> = ~i Galaxy.amount() ~<span ~style.display=Galaxy.showSpecialZeroText() ? '' : 'none'~> (since you haven't unlocked galaxies yet)</span> galax~y Galaxy.amount() ~.</span>
        <br/>
        <span>Next galaxies are at ~f Galaxy.nextStellarProductGalaxy() ~ stellar product and ~f Galaxy.nextComplexityPointGalaxy() ~ total ℂP this finality.</span>
        <br/>
        <span>Your galaxies are increasing the strength of new powers by ~r formatPrecisely(Galaxy.getStrengthIncrease()) ~.</span>
        <br/>
        <br/>
        <span>You have spent ~t player.stats.timeSinceComplexity ~ in this complexity, increasing chroma caps ^~r formatPrecisely(Galaxy.effect()) ~.</span>
        <br/>
        <br/>
        <span>You can make some of your galaxies dilated to make the galaxy effect increase faster, but have a lower cap.</span>
        <br/>
        <span>Currently ~i Galaxy.dilated() ~ galax~y Galaxy.dilated() ~<span> </span>~r Galaxy.dilated() === 1 ? 'is' : 'are' ~ dilated, making the galaxy effect have speed ~i Galaxy.effectSpeed() ~x and cap ~r formatPrecisely(Galaxy.effectCap()) ~, capping in ~t Galaxy.timeToReachEffectCap() ~.</span>
        <br/>
        <span>Next complexity ~i Galaxy.nextDilated() ~ galax~y Galaxy.nextDilated() ~ will be dilated, making the galaxy effect have speed ~i Galaxy.nextEffectSpeed() ~x and cap ~r formatPrecisely(Galaxy.nextEffectCap()) ~, capping in ~t Galaxy.nextTimeToReachEffectCap() ~.</span>
        <br/>
        <br/>
        <span>
          Galaxies to make dilated next complexity reset:
          <span style="display: inline-block; width: 16px;"></span>
          Mode: <select class="next-dilated-mode" ~!value=Galaxy.nextDilatedMode()~ ~!onchange=function() {Galaxy.setNextDilatedMode(this.value)}~>
            <option value="Amount">Amount</option>
            <option value="All but amount">All but amount</option>
            <option value="Seconds to reach cap">Seconds to reach cap</option>
          </select>
          <span style="display: inline-block; width: 16px;"></span>
          ~r Galaxy.nextDilatedMode() ~: <input class="next-dilated-amount" type="text" ~!value=NotationOptions.format('next-dilated-amount')~ ~!onchange=function() {Galaxy.setNextDilatedAmount(NotationOptions.read('next-dilated-amount', this.value))}~></input>
        </span>
        <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
        <span><button ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~ onclick="Galaxy.toggleResetNextDilatedOnFinality()">Reset dilated galaxies to ~i 0 ~ amount on finality: ~r Galaxy.isResetNextDilatedOnFinalityOn() ? "On" : "Off" ~</button></span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'finality' ? '' : 'none'~>
      <span>You have ~i FinalityPoints.amount() ~ finality point~s FinalityPoints.amount() ~ (FP).
        <button ~class=FinalityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="FinalityMaxAll.maxAll()">Max all</button>
      </span>
      <br/>
      <span>You have produced ~i FinalityPoints.totalFPProduced() ~ total finality point~s FinalityPoints.totalFPProduced() ~.</span>
      <br/>
      <span>You have ~i Finalities.amount() ~ finalit~y Finalities.amount() ~, multiplying all finality generators (FGs) by ~q Finalities.finalityGeneratorMultiplier() ~,</span>
      <br/>
      <span>making the finality generator per-purchase multiplier ~q Finalities.finalityGeneratorPerPurchaseMultiplier() ~x,</span>
      <br/>
      <span>and <span ~style.display=EternityChallenge.autoECFromFinalities() ? '' : 'none'~>auto-completing an EC tier every ~tq Finalities.autoECCompletionTime() ~</span><span ~style.display=EternityChallenge.autoECFromFinalities() ? 'none' : ''~>never auto-completing an EC tier</span><span ~style.display=EternityChallenge.autoECFromComplexities() ? '' : 'none'~> (actually one EC tier per ~tq EternityChallenge.autoECCompletionTime() ~ due to complexities)</span>.</span>
      <br/>
      <span>You have ~f FinalityStars.amount() ~ finality stars, multiplying all non-finality generators by ~f FinalityStars.multiplier() ~x.</span>
      <br/>
      <span>You are getting ~f FinalityStars.perSecond() ~ finality stars per second.</span>
      <br/>
      <span>View all finality generators even if they would be otherwise invisible: <input type="checkbox" ~!checked=Options.rawViewAllGenerators('finality')~ ~!onchange=function() {Options.setRawViewAllGenerators('finality', this.checked)}~></input></span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <loop i 1 8>
          <tr ~style.display=FinalityGenerator(% @i %).isVisible() ? '' : 'none'~>
            <td>Finality Generator ~o % @i % ~</td>
            <td>~f FinalityGenerator(% @i %).amount() ~</td>
            <td>~f FinalityGenerator(% @i %).perSecond() ~/s</td>
            <td>~f FinalityGenerator(% @i %).multiplier() ~x</td>
            <td><button ~class=FinalityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(% @i %).buy()">Cost: ~i FinalityGenerator(% @i %).cost() ~ FP</button></td>
            <td><button ~class=FinalityGenerator(% @i %).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(% @i %).buyMax()">Max</button></td>
          </tr>
        </loop>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'finality-shards' ? '' : 'none'~>
      <span>You have ~i FinalityShards.total() ~ total finality shard~s FinalityShards.total() ~ and ~i FinalityShards.amount() ~ unspent finality shard~s FinalityShards.amount() ~ (FS).
        <button ~class=FinalityShards.anythingToBuy() ? "" : "disabled"~ onclick="FinalityShards.maxAll()">Max all</button>
      </span>
      <br/>
      <span>You have made ~i FinalityShards.totalUpgrades() ~ total finality shard upgrade purchase~s FinalityShards.totalUpgrades() ~, giving you starting bonuses with a strength of ~i FinalityShards.totalUpgradeBonuses() ~ (~i 1 ~ per ~i 4 ~ purchases).</span>
      <br/>
      <span>These starting bonuses let you start finalities with more of various resources. Look below finality shard upgrades for more details.</span>
      <br/>
      <span>You will get ~i FinalityPrestigeLayer.finalityShardGain() ~ finality shard~s FinalityPrestigeLayer.finalityShardGain() ~ next finality.</span>
      <br/>
      <span>(This gain of finality shards is ~i 16 ~ times (~i 1 ~ + finalities), doubled if (~i 1 ~ + finalities) is a multiple of ~i 64 ~.)</span>
      <br/>
      <div ~style.display=Options.showFullOptions('finality') ? 'none' : ''~>
        <button onclick="FinalityShardPresets.respecAndReset()" ~class=FinalityShardPresets.canRespec() ? "" : "disabled"~>Respec finality shard upgrades and ~r FinalityPrestigeLayer.resetText() ~</button></button>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>There are a lot of finality shard options. To see the others, go to the options tab and toggle (turn on) "Full finality shard options" in the "other options" part.</span>
        </div>
      </div>
      <div ~style.display=Options.showFullOptions('finality') ? '' : 'none'~>
        <button class="finality-shard-upgrades-export-button" onclick="FinalityShardPresets.export()">Export finality shard upgrades</button> <button onclick="FinalityShardPresets.import()">Import finality shard upgrades</button>
        <button onclick="FinalityShardPresets.toggleRespec()">Respec finality shard upgrades on next finality: ~r FinalityShardPresets.isRespecOn() ? "On" : "Off" ~</button>
        <br/>
        <button onclick="FinalityShardPresets.respecAndReset()" ~class=FinalityShardPresets.canRespec() ? "" : "disabled"~>Respec finality shard upgrades and ~r FinalityPrestigeLayer.resetText() ~</button>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>There are a lot of finality shard options. To hide most of them, go to the options tab and toggle (turn off) "Full finality shard options" in the "other options" part.</span>
        </div>
      </div>
      <br/>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">
        <div ~style.display=Options.showFullOptions('finality') ? '' : 'none'~>
          <button onclick="FinalityShardPresets.togglePresetRespec()">Respec finality shard upgrades when loading a preset: ~r FinalityShardPresets.presetRespec() ? "On" : "Off" ~  (reversed when holding shift)</button>
        </div>
        <span>Click on the name of a finality preset on the line below to buy those finality shard upgrades:</span>
        <br/>
        <loop i 1 32>
          <button ~class=FinalityShardPresets.presetClass(% @i %)~ ~style.display=FinalityShardPresets.hasPreset(% @i %) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(% @i %)">~r FinalityShardPresets.presetName(% @i %) ~</button>
        </loop>
        <div ~style.display=FinalityShardPresets.hasPreset(1) ? 'none' : ''~>
          You don't currently have any finality presets. You can create presets at the bottom of this tab.
        </div>
      </div>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>Power to non-finality generator multipliers (~i FinalityShardUpgrade(1).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? 'none' : ''~>^~r formatPrecisely(FinalityShardUpgrade(1).effect()) ~ → ^~r formatPrecisely(FinalityShardUpgrade(1).nextEffect()) ~</span><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? '' : 'none'~>^~r formatPrecisely(FinalityShardUpgrade(1).effect()) ~ (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(1).buy()">Cost: ~i FinalityShardUpgrade(1).cost() ~ finality shard~s FinalityShardUpgrade(1).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(1).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Finality point gain on finality (~i FinalityShardUpgrade(2).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(2).effect() ~ FP → ~i FinalityShardUpgrade(2).nextEffect() ~ FP</span><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(2).effect() ~ FP (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(2).buy()">Cost: ~i FinalityShardUpgrade(2).cost() ~ finality shard~s FinalityShardUpgrade(2).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(2).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to eternity and permanence gain (~i FinalityShardUpgrade(3).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(3).effect() ~x → ~i FinalityShardUpgrade(3).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(3).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(3).buy()">Cost: ~i FinalityShardUpgrade(3).cost() ~ finality shard~s FinalityShardUpgrade(3).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(3).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to chroma buildup speed (~i FinalityShardUpgrade(4).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(4).effect() ~x → ~i FinalityShardUpgrade(4).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(4).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(4).buy()">Cost: ~i FinalityShardUpgrade(4).cost() ~ finality shard~s FinalityShardUpgrade(4).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(4).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to chroma cap (~i FinalityShardUpgrade(5).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? 'none' : ''~>~f FinalityShardUpgrade(5).effect() ~x → ~f FinalityShardUpgrade(5).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? '' : 'none'~>~f FinalityShardUpgrade(5).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(5).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(5).buy()">Cost: ~i FinalityShardUpgrade(5).cost() ~ finality shard~s FinalityShardUpgrade(5).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(5).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(5).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to power gain speed (~i FinalityShardUpgrade(6).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(6).effect() ~x → ~i FinalityShardUpgrade(6).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(6).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(6).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(6).buy()">Cost: ~i FinalityShardUpgrade(6).cost() ~ finality shard~s FinalityShardUpgrade(6).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(6).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(6).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Increase to strength of new powers (~i FinalityShardUpgrade(7).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? 'none' : ''~>+~f FinalityShardUpgrade(7).effect() ~ → +~f FinalityShardUpgrade(7).nextEffect() ~</span><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? '' : 'none'~>+~f FinalityShardUpgrade(7).effect() ~ (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(7).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(7).buy()">Cost: ~i FinalityShardUpgrade(7).cost() ~ finality shard~s FinalityShardUpgrade(7).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(7).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(7).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to galaxy effect buildup speed (~i FinalityShardUpgrade(8).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(8).effect() ~x → ~i FinalityShardUpgrade(8).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(8).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(8).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(8).buy()">Cost: ~i FinalityShardUpgrade(8).cost() ~ finality shard~s FinalityShardUpgrade(8).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(8).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(8).buyMax()">Max</button></span></td>
        </tr>
      </table>
      <br ~style.display=Trivia.show('finality shard bought limits') ? '' : 'none'~/>
      <span ~style.display=Trivia.show('finality shard bought limits') ? '' : 'none'~>The first ~i 2 ~ finality shard upgrades can be bought up to ~i FinalityShardUpgrade(1).boughtLimit() ~ times; the other ~i 6 ~ can be bought up to ~i FinalityShardUpgrade(3).boughtLimit() ~ times.</span>
      <br/>
      <br/>
      <span>You have made ~i FinalityShards.totalUpgrades() ~ total finality shard upgrade purchase~s FinalityShards.totalUpgrades() ~, giving you starting bonuses with a strength of ~i FinalityShards.totalUpgradeBonuses() ~ (~i 1 ~ per ~i 4 ~ purchases):</span>
      <br ~style.display=FinalityStartingBenefits.stars().gt(0) ? '' : 'none'~>
      <span ~style.display=FinalityStartingBenefits.stars().gt(0) ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAboveDisplay('prestige') ~ with ~i FinalityStartingBenefits.stars() ~ extra star~s FinalityStartingBenefits.stars() ~.</span>
      <br ~style.display=FinalityStartingBenefits.infinityPoints().gt(0) ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.infinityPoints().gt(0) ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAboveDisplay('eternity') ~ with ~i FinalityStartingBenefits.infinityPoints() ~ extra infinity point~s FinalityStartingBenefits.infinityPoints() ~.</span>
      <br ~style.display=FinalityStartingBenefits.eternityPoints().gt(0) ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.eternityPoints().gt(0) ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ with ~i FinalityStartingBenefits.eternityPoints() ~ eternity point~s FinalityStartingBenefits.eternityPoints() ~.</span>
      <br ~style.display=FinalityStartingBenefits.anyComplexityStartingBenefits() ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.anyComplexityStartingBenefits() ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAboveDisplay('finality') ~ with ~r FinalityStartingBenefits.complexityStartingBenefitsDisplay() ~.</span>
      <br ~style.display=FinalityStartingBenefits.anyGalaxies() ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.anyGalaxies() ? '' : 'none'~>You start with ~i FinalityStartingBenefits.galaxies() ~ extra galax~y FinalityStartingBenefits.galaxies() ~ after unlocking galaxies.</span>
      <br ~style.display=Trivia.show('complexity achievement order') ? '' : 'none'~/>
      <span ~style.display=Trivia.show('complexity achievement order') ? '' : 'none'~>(Starting complexity achievements are given top-to-bottom, and left-to-right within each row.)</span>
      <br/>
      <br/>
      <span>Finality presets (<button onclick="FinalityShardPresets.presetSort()">sort by name</button>):</span>
      <br/>
      <loop i 1 32>
        <div ~style.display=FinalityShardPresets.hasPreset(% @i %) ? '' : 'none'~>
          Name: <input class="presetfinalityshardupgradename% @i %" type="text" ~!value=FinalityShardPresets.presetName(% @i %)~ ~!onchange=function() {FinalityShardPresets.setPresetName(% @i %, this.value)}~></input>
          Finality shard upgrades: <input class="presetfinalityshardupgradelist% @i %" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(% @i %)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(% @i %, this.value)}~></input>
          <button % (@i === 1) ? 'class="disabled" ' : '' %onclick="FinalityShardPresets.presetMoveUp(% @i %)">↑</button>
          <button % (@i === 32) ? `class="disabled"` : `~class=FinalityShardPresets.hasPreset(${@i + 1}) ? "" : "disabled"~` % onclick="FinalityShardPresets.presetMoveDown(% @i %)">↓</button>
          <button onclick="FinalityShardPresets.presetLoad(% @i %)">Load</button>
          <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(% @i %)">Change to current upgrades</button>
          <button onclick="FinalityShardPresets.presetDelete(% @i %)">Delete</button>
        </div>
      </loop>
      <span>
        <button ~style.display=FinalityShardPresets.hasPreset(32) ? 'none' : ''~ onclick="FinalityShardPresets.presetCreate()">Create a finality preset</button>
        <span ~style.display=FinalityShardPresets.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ finality presets. Delete existing presets to create more.</span>
      </span>
      <br/>
      <span style="display: none;">Exported finality shard upgrades (also copied to clipboard): <input id="finality-shard-upgrades-export-output"></input></span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'finality-milestones' ? '' : 'none'~>
      <span>
        You have ~q Finalities.amount() ~ finalit~y Finalities.amount() ~.
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(1)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(1) ~ finality
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(1) ~
              <br/>
              Divide the complexity unlock requirements for complexity challenges by ~i 2 ~.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(2)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(2) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(2) ~
              <br/>
              Remove the complexity unlock requirements for complexity challenges, and always have autobuyers for complexity generator and power upgrades.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(3)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(3) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(3) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAboveDisplay('finality') ~ with ~i FinalityMilestones.rawStartingComplexityPoints() ~ ℂP.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(4)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(4) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(4) ~
              <br/>
              Keep already-obtained completions of each complexity challenge on ~r PrestigeLayerNames.layersAboveDisplay('finality') ~ based on your finalities (currently up to ~i FinalityMilestones.rawKeptComplexityChallenges() ~)
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(5)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(5) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(5) ~
              <br/>
              Automatically gain permanence every second without needing to reset eternities.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(6)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(6) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(6) ~
              <br/>
              Unlock study list auto-load.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(7)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(7) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(7) ~
              <br/>
              Unlock autobuyers for power shard upgrades.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(8)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(8) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(8) ~
              <br/>
              Always have EP generation.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(9)~ style="font-size: 0.875rem;">
              ~i FinalityMilestones.getFinalityMilestoneRequirement(9) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(9) ~
              <br/>
              Complexity Challenge ~o 6 ~ reward strength and total complexity stars are based on hypercomplexity stars, which are what your complexity stars would be if your complexity power~s Powers.equippedLimit() ~ were equipped.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(10)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(10) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(10) ~
              <br/>
              Automatically unlock powers when possible.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(11)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(11) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(11) ~
              <br/>
              Automatically swap equipped powers with better stored powers of the same type.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(12)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(12) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(12) ~
              <br/>
              Automatically unlock the Oracle and galaxies when possible.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(13)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(13) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(13) ~
              <br/>
              Unlock equipped powers auto-load.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(14)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(14) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(14) ~
              <br/>
              Unlock a finality autobuyer.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(15)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(15) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(15) ~
              <br/>
              For galaxy effect and eternity power extra multipliers, you start each ~r PrestigeLayerNames.layersAboveDisplay('complexity') ~ with time in complexity based on your finalities (currently ~t FinalityMilestones.rawFreeTimeInComplexity() ~)
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(16)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(16) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(16) ~
              <br/>
              You gain your complexity points on complexity every second, without needing to complexity (ℂP generation).
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'goals' ? '' : 'none'~>
      <span>You have completed ~i Goals.numberOfGoalsCompleted() ~/~i Goals.numberOfGoals() ~ goals.</span>
      <br/>
      <span>By default, only goals up to the next goal after the last completed goal are displayed. <button onclick="Goals.toggleDisplayAllGoals()">Display all goals: ~r Goals.displayAllGoals() ? "On" : "Off" ~</button></span>
      <br/>
      <span>There is no in-game reward for completing goals, but you win the game (and have finished it) when you complete them all.</span>
      <br/>
      <span>(Note: Saves from before these times were recorded may have some unknown times.) <button onclick="Goals.toggleTimes()">Show time taken to reach each goal: ~r Goals.showTimes() ? 'On' : 'Off' ~</button></span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <loop i 0 3>
          <tr>
            <loop j 1 4>
              <td>
                <div class="goaldiv" ~style.background=Goals.color(% 4 * @i + @j %)~>
                  <span>~r Goals.getGoalText(% 4 * @i + @j %) ~% (4 * @i + @j <= 3) ? ` <span class="helpspan" ~style.display=Goals.displayGoal(${4 * @i + @j}) ? '' : 'none'~>(?)<span class="tooltiptext">~r Goals.getGoalTooltip(${4 * @i + @j}) ~</span></span>` : '' %</span>
                  <br/>
                  ~r Goals.getGoalStatusDescription(% 4 * @i + @j %) ~
                  <div ~style.display=(Goals.showTimes() && Goals.hasGoal(% 4 * @i + @j %)) ? '' : 'none'~>
                    ~r Goals.showTotalTime(% 4 * @i + @j %) ~
                    <br/>
                    (~r Goals.showOnlineTime(% 4 * @i + @j %) ~ online)
                  </div>
                </div>
              </td>
            </loop>
          </tr>
        </loop>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'achievements' ? '' : 'none'~>
      <span>You have completed ~i Achievements.getTotalAchievementsUnlocked() ~ achievements.</span>
      <br/>
      <span>Only achievements up to ~i Achievements.beyondHighest() ~ beyond the last achievement you have are shown. The others are replaced with question marks.</span>
      <br/>
      <span>Number of achievements beyond last reached achievement to show: <input type="text" class="achievements-beyond-highest" ~!value=NotationOptions.format('achievements-beyond-highest')~ ~!onchange=function() {Achievements.setBeyondHighest(NotationOptions.read('achievements-beyond-highest', this.value))}~></input></span>
      <br/>
      <span>There are by default small rewards for completing achievements.</span>
      <br/>
      <span>If you think this ruins the game somehow, you can turn rewards off.</span>
      <br/>
      <span>Your achievements ~r Achievements.active() ? 'are' : 'would be' ~ multiplying all generators <span ~style.display=PrestigeLayerProgress.hasReached('infinity')~>(of any type) </span>by ~f Achievements.rawGeneratorMultiplier() ~x~r Achievements.hasNonGeneratorEffects() ? ',' : '.' ~</span>
      <br ~style.display=Achievements.hasNonGeneratorEffects() ? '' : 'none'~/>
      <span ~style.display=Achievements.hasNonGeneratorEffects() ? '' : 'none'~>and multiplying ~r Achievements.nonGeneratorEffectsText() ~ by ~r formatPrecisely(Achievements.rawOtherMultiplier()) ~x.</span>
      <br/>
      <span>
        <button onclick="Achievements.toggleActive()">Achievement rewards: ~r Achievements.active() ? 'On' : 'Off' ~</button>
        <button onclick="Achievements.toggleRequirementDescriptions()">Achievement descriptions at bottom of tab: ~r Achievements.requirementDescriptions() ? 'On' : 'Off' ~</button>
      </span>
      <br/>
      <span>
        <button onclick="Achievements.toggleShowFullyFarRows()">Show fully-question-mark achievement rows: ~r Achievements.showFullyFarRows() ? 'On' : 'Off' ~</button>
        <button onclick="Achievements.toggleShowCompletedRows()">Show completed achievement rows: ~r Achievements.showCompletedRows() ? 'On' : 'Off' ~</button>
      </span>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: collapse;">
        <tr ~style.display=Achievements.showRow(1) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(1, 1)~>
            <span>~r Achievements.getAchievementName(1, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 1) ? '' : 'none'~>Buy Generator ~o 1 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 2)~>
            <span>~r Achievements.getAchievementName(1, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 2) ? '' : 'none'~>Buy Generator ~o 2 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 3)~>
            <span>~r Achievements.getAchievementName(1, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 3) ? '' : 'none'~>Buy Generator ~o 3 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 4)~>
            <span>~r Achievements.getAchievementName(1, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 4) ? '' : 'none'~>Buy Generator ~o 4 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 5)~>
            <span>~r Achievements.getAchievementName(1, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 5) ? '' : 'none'~>Buy Generator ~o 5 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 6)~>
            <span>~r Achievements.getAchievementName(1, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 6) ? '' : 'none'~>Buy Generator ~o 6 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 7)~>
            <span>~r Achievements.getAchievementName(1, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 7) ? '' : 'none'~>Buy Generator ~o 7 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(1, 8)~>
            <span>~r Achievements.getAchievementName(1, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(1, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(1, 8) ? '' : 'none'~>Buy Generator ~o 8 ~.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(2) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(2, 1)~>
            <span>~r Achievements.getAchievementName(2, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 1) ? '' : 'none'~>Sacrifice.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 2)~>
            <span>~r Achievements.getAchievementName(2, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 2) ? '' : 'none'~>Have ~i 2 ~ boosts.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 3)~>
            <span>~r Achievements.getAchievementName(2, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 3) ? '' : 'none'~>Have at least ~i Math.pow(2, 16) ~ of every ~r Generators.term(true) ~ other than Generator ~o 8 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 4)~>
            <span>~r Achievements.getAchievementName(2, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 4) ? '' : 'none'~>Have some generator multiplier over ~i Math.pow(2, 16) ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 5)~>
            <span>~r Achievements.getAchievementName(2, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 5) ? '' : 'none'~>Prestige.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 6)~>
            <span>~r Achievements.getAchievementName(2, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 6) ? '' : 'none'~>Have autobuyers for all ~r Generators.term() ~ and boosts.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 7)~>
            <span>~r Achievements.getAchievementName(2, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 7) ? '' : 'none'~>Have all ~r Generators.term(true) ~ multipliers in reverse order (G8 multiplier larger than G7 multiplier ... larger than G1 multiplier).</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(2, 8)~>
            <span>~r Achievements.getAchievementName(2, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(2, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(2, 8) ? '' : 'none'~>Infinity.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(3) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(3, 1)~>
            <span>~r Achievements.getAchievementName(3, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 1) ? '' : 'none'~>Complete a normal challenge.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 2)~>
            <span>~r Achievements.getAchievementName(3, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 2) ? '' : 'none'~>Complete ~i 6 ~ normal challenges.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 3)~>
            <span>~r Achievements.getAchievementName(3, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 3) ? '' : 'none'~>Break infinity.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 4)~>
            <span>~r Achievements.getAchievementName(3, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 4) ? '' : 'none'~>Get ~i Decimal.pow(2, 1024) ~ stars.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 5)~>
            <span>~r Achievements.getAchievementName(3, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 5) ? '' : 'none'~>Get ~i 256 ~ infinities.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 6)~>
            <span>~r Achievements.getAchievementName(3, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 6) ? '' : 'none'~>Infinity in Normal Challenge ~o 10 ~ without sacrificing.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 7)~>
            <span>~r Achievements.getAchievementName(3, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 7) ? '' : 'none'~>Infinity in Normal Challenge ~o 2 ~ in ~ti 16 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(3, 8)~>
            <span>~r Achievements.getAchievementName(3, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(3, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(3, 8) ? '' : 'none'~>Complete an infinity challenge.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(4) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(4, 1)~>
            <span>~r Achievements.getAchievementName(4, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 1) ? '' : 'none'~>Infinity in Infinity Challenge ~o 1 ~ in ~ti 1 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 2)~>
            <span>~r Achievements.getAchievementName(4, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 2) ? '' : 'none'~>Infinity in Infinity Challenge ~o 3 ~ in ~ti 3 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 3)~>
            <span>~r Achievements.getAchievementName(4, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 3) ? '' : 'none'~>Complete all infinity challenges.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 4)~>
            <span>~r Achievements.getAchievementName(4, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 4) ? '' : 'none'~>Eternity.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 5)~>
            <span>~r Achievements.getAchievementName(4, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 5) ? '' : 'none'~>Eternity in ~ts 3600 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 6)~>
            <span>~r Achievements.getAchievementName(4, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 6) ? '' : 'none'~>Buy a study.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 7)~>
            <span>~r Achievements.getAchievementName(4, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 7) ? '' : 'none'~>Complete all eternity milestones.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(4, 8)~>
            <span>~r Achievements.getAchievementName(4, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(4, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(4, 8) ? '' : 'none'~>Get ~i 256 ~ eternities.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(5) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(5, 1)~>
            <span>~r Achievements.getAchievementName(5, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 1) ? '' : 'none'~>Have all the first-row studies at once.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 2)~>
            <span>~r Achievements.getAchievementName(5, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 2) ? '' : 'none'~>Infinity in Infinity Challenge ~o 4 ~ in ~ti 16 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 3)~>
            <span>~r Achievements.getAchievementName(5, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 3) ? '' : 'none'~>Unlock the Eternity Producer.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 4)~>
            <span>~r Achievements.getAchievementName(5, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 4) ? '' : 'none'~>Complete an eternity challenge.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 5)~>
            <span>~r Achievements.getAchievementName(5, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 5) ? '' : 'none'~>Get ~i Math.pow(2, 256) ~ total EP.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 6)~>
            <span>~r Achievements.getAchievementName(5, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 6) ? '' : 'none'~>Gain permanence.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 7)~>
            <span>~r Achievements.getAchievementName(5, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 7) ? '' : 'none'~>Eternity for ~i Math.pow(2, 256) ~ EP while in Eternity Challenge ~o 1 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(5, 8)~>
            <span>~r Achievements.getAchievementName(5, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(5, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(5, 8) ? '' : 'none'~>Unlock chroma.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(6) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(6, 1)~>
            <span>~r Achievements.getAchievementName(6, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 1) ? '' : 'none'~>Complete all eternity challenges (~i 4 ~ times each).</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 2)~>
            <span>~r Achievements.getAchievementName(6, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 2) ? '' : 'none'~>Get ~i Decimal.pow(9, Math.pow(9, 9)) ~ stars.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 3)~>
            <span>~r Achievements.getAchievementName(6, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 3) ? '' : 'none'~>Have all the studies in the first three rows at once.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 4)~>
            <span>~r Achievements.getAchievementName(6, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 4) ? '' : 'none'~>Get at least ~i 1 ~ permanence per eternity.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 5)~>
            <span>~r Achievements.getAchievementName(6, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 5) ? '' : 'none'~>Complexity.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 6)~>
            <span>~r Achievements.getAchievementName(6, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 6) ? '' : 'none'~>Complexity in ~ts Math.pow(2, 16) ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 7)~>
            <span>~r Achievements.getAchievementName(6, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 7) ? '' : 'none'~>Complete a complexity achievement.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(6, 8)~>
            <span>~r Achievements.getAchievementName(6, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(6, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(6, 8) ? '' : 'none'~>Complete all the complexity achievements.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(7) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(7, 1)~>
            <span>~r Achievements.getAchievementName(7, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 1) ? '' : 'none'~>Get ~i 256 ~ complexities.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 2)~>
            <span>~r Achievements.getAchievementName(7, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 2) ? '' : 'none'~>Complexity for ~i 16 ~ ℂP without unlocking red.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 3)~>
            <span>~r Achievements.getAchievementName(7, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 3) ? '' : 'none'~>Complexity while in all ~i 6 ~ complexity challenges.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 4)~>
            <span>~r Achievements.getAchievementName(7, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 4) ? '' : 'none'~>Unlock powers.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 5)~>
            <span>~r Achievements.getAchievementName(7, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 5) ? '' : 'none'~>Have ~i 12 ~ total powers (equipped and stored powers, not counting deleted powers).</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 6)~>
            <span>~r Achievements.getAchievementName(7, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 6) ? '' : 'none'~>Unlock the Oracle.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 7)~>
            <span>~r Achievements.getAchievementName(7, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 7) ? '' : 'none'~>Craft a power.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(7, 8)~>
            <span>~r Achievements.getAchievementName(7, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(7, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(7, 8) ? '' : 'none'~>Unlock galaxies.</span>
          </td>
        </tr>
        <tr ~style.display=Achievements.showRow(8) ? '' : 'none'~>
          <td class="achievementtd" ~style.background=Achievements.color(8, 1)~>
            <span>~r Achievements.getAchievementName(8, 1) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 1) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 1) ? '' : 'none'~>Get a power with rarity at least ~i 3 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 2)~>
            <span>~r Achievements.getAchievementName(8, 2) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 2) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 2) ? '' : 'none'~>Have the eternity power extra multiplier reach its cap (which is ~i 3 ~).</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 3)~>
            <span>~r Achievements.getAchievementName(8, 3) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 3) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 3) ? '' : 'none'~>Have the time for the galaxy effect to cap be at least ~ts 18000 ~ (you don't have to wait for the galaxy effect to actually reach the cap).</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 4)~>
            <span>~r Achievements.getAchievementName(8, 4) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 4) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 4) ? '' : 'none'~>Finality.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 5)~>
            <span>~r Achievements.getAchievementName(8, 5) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 5) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 5) ? '' : 'none'~>Finality in ~ts Math.pow(2, 16) ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 6)~>
            <span>~r Achievements.getAchievementName(8, 6) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 6) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 6) ? '' : 'none'~>Get finality shard upgrade starting bonuses to a strength of ~i 16 ~.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 7)~>
            <span>~r Achievements.getAchievementName(8, 7) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 7) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 7) ? '' : 'none'~>Complete all finality milestones.</span>
          </td>
          <td class="achievementtd" ~style.background=Achievements.color(8, 8)~>
            <span>~r Achievements.getAchievementName(8, 8) ~</span>
            <br/>
            <span>(~r Achievements.achievementStatusDescription(8, 8) ~)</span>
            <span class="tooltiptext" ~style.display=Achievements.isAchievementClose(8, 8) ? '' : 'none'~>Buy the maximum possible of all finality shard upgrades.</span>
          </td>
        </tr>
      </table>
      <div class="major-div" style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Achievements.requirementDescriptions() ? '' : 'none'~>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 1) ? '' : 'none'~>~r Achievements.getAchievementName(1, 1) ~ (~r Achievements.achievementStatusDescription(1, 1) ~): Buy Generator ~o 1 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 2) ? '' : 'none'~>~r Achievements.getAchievementName(1, 2) ~ (~r Achievements.achievementStatusDescription(1, 2) ~): Buy Generator ~o 2 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 3) ? '' : 'none'~>~r Achievements.getAchievementName(1, 3) ~ (~r Achievements.achievementStatusDescription(1, 3) ~): Buy Generator ~o 3 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 4) ? '' : 'none'~>~r Achievements.getAchievementName(1, 4) ~ (~r Achievements.achievementStatusDescription(1, 4) ~): Buy Generator ~o 4 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 5) ? '' : 'none'~>~r Achievements.getAchievementName(1, 5) ~ (~r Achievements.achievementStatusDescription(1, 5) ~): Buy Generator ~o 5 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 6) ? '' : 'none'~>~r Achievements.getAchievementName(1, 6) ~ (~r Achievements.achievementStatusDescription(1, 6) ~): Buy Generator ~o 6 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 7) ? '' : 'none'~>~r Achievements.getAchievementName(1, 7) ~ (~r Achievements.achievementStatusDescription(1, 7) ~): Buy Generator ~o 7 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(1, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(1, 8) ? '' : 'none'~>~r Achievements.getAchievementName(1, 8) ~ (~r Achievements.achievementStatusDescription(1, 8) ~): Buy Generator ~o 8 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 1) ? '' : 'none'~>~r Achievements.getAchievementName(2, 1) ~ (~r Achievements.achievementStatusDescription(2, 1) ~): Sacrifice.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 2) ? '' : 'none'~>~r Achievements.getAchievementName(2, 2) ~ (~r Achievements.achievementStatusDescription(2, 2) ~): Have ~i 2 ~ boosts.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 3) ? '' : 'none'~>~r Achievements.getAchievementName(2, 3) ~ (~r Achievements.achievementStatusDescription(2, 3) ~): Have at least ~i Math.pow(2, 16) ~ of every ~r Generators.term(true) ~ other than Generator ~o 8 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 4) ? '' : 'none'~>~r Achievements.getAchievementName(2, 4) ~ (~r Achievements.achievementStatusDescription(2, 4) ~): Have some generator multiplier over ~i Math.pow(2, 16) ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 5) ? '' : 'none'~>~r Achievements.getAchievementName(2, 5) ~ (~r Achievements.achievementStatusDescription(2, 5) ~): Prestige.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 6) ? '' : 'none'~>~r Achievements.getAchievementName(2, 6) ~ (~r Achievements.achievementStatusDescription(2, 6) ~): Have autobuyers for all ~r Generators.term() ~ and boosts.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 7) ? '' : 'none'~>~r Achievements.getAchievementName(2, 7) ~ (~r Achievements.achievementStatusDescription(2, 7) ~): Have all ~r Generators.term(true) ~ multipliers in reverse order (G8 multiplier larger than G7 multiplier ... larger than G1 multiplier).</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(2, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(2, 8) ? '' : 'none'~>~r Achievements.getAchievementName(2, 8) ~ (~r Achievements.achievementStatusDescription(2, 8) ~): Infinity.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 1) ? '' : 'none'~>~r Achievements.getAchievementName(3, 1) ~ (~r Achievements.achievementStatusDescription(3, 1) ~): Complete a normal challenge.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 2) ? '' : 'none'~>~r Achievements.getAchievementName(3, 2) ~ (~r Achievements.achievementStatusDescription(3, 2) ~): Complete ~i 6 ~ normal challenges.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 3) ? '' : 'none'~>~r Achievements.getAchievementName(3, 3) ~ (~r Achievements.achievementStatusDescription(3, 3) ~): Break infinity.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 4) ? '' : 'none'~>~r Achievements.getAchievementName(3, 4) ~ (~r Achievements.achievementStatusDescription(3, 4) ~): Get ~i Decimal.pow(2, 1024) ~ stars.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 5) ? '' : 'none'~>~r Achievements.getAchievementName(3, 5) ~ (~r Achievements.achievementStatusDescription(3, 5) ~): Get ~i 256 ~ infinities.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 6) ? '' : 'none'~>~r Achievements.getAchievementName(3, 6) ~ (~r Achievements.achievementStatusDescription(3, 6) ~): Infinity in Normal Challenge ~o 10 ~ without sacrificing.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 7) ? '' : 'none'~>~r Achievements.getAchievementName(3, 7) ~ (~r Achievements.achievementStatusDescription(3, 7) ~): Infinity in Normal Challenge ~o 2 ~ in ~ti 16 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(3, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(3, 8) ? '' : 'none'~>~r Achievements.getAchievementName(3, 8) ~ (~r Achievements.achievementStatusDescription(3, 8) ~): Complete an infinity challenge.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 1) ? '' : 'none'~>~r Achievements.getAchievementName(4, 1) ~ (~r Achievements.achievementStatusDescription(4, 1) ~): Infinity in Infinity Challenge ~o 1 ~ in ~ti 1 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 2) ? '' : 'none'~>~r Achievements.getAchievementName(4, 2) ~ (~r Achievements.achievementStatusDescription(4, 2) ~): Infinity in Infinity Challenge ~o 3 ~ in ~ti 3 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 3) ? '' : 'none'~>~r Achievements.getAchievementName(4, 3) ~ (~r Achievements.achievementStatusDescription(4, 3) ~): Complete all infinity challenges.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 4) ? '' : 'none'~>~r Achievements.getAchievementName(4, 4) ~ (~r Achievements.achievementStatusDescription(4, 4) ~): Eternity.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 5) ? '' : 'none'~>~r Achievements.getAchievementName(4, 5) ~ (~r Achievements.achievementStatusDescription(4, 5) ~): Eternity in ~ts 3600 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 6) ? '' : 'none'~>~r Achievements.getAchievementName(4, 6) ~ (~r Achievements.achievementStatusDescription(4, 6) ~): Buy a study.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 7) ? '' : 'none'~>~r Achievements.getAchievementName(4, 7) ~ (~r Achievements.achievementStatusDescription(4, 7) ~): Complete all eternity milestones.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(4, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(4, 8) ? '' : 'none'~>~r Achievements.getAchievementName(4, 8) ~ (~r Achievements.achievementStatusDescription(4, 8) ~): Get ~i 256 ~ eternities.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 1) ? '' : 'none'~>~r Achievements.getAchievementName(5, 1) ~ (~r Achievements.achievementStatusDescription(5, 1) ~): Have all the first-row studies at once.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 2) ? '' : 'none'~>~r Achievements.getAchievementName(5, 2) ~ (~r Achievements.achievementStatusDescription(5, 2) ~): Infinity in Infinity Challenge ~o 4 ~ in ~ti 16 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 3) ? '' : 'none'~>~r Achievements.getAchievementName(5, 3) ~ (~r Achievements.achievementStatusDescription(5, 3) ~): Unlock the Eternity Producer.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 4) ? '' : 'none'~>~r Achievements.getAchievementName(5, 4) ~ (~r Achievements.achievementStatusDescription(5, 4) ~): Complete an eternity challenge.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 5) ? '' : 'none'~>~r Achievements.getAchievementName(5, 5) ~ (~r Achievements.achievementStatusDescription(5, 5) ~): Get ~i Math.pow(2, 256) ~ total EP.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 6) ? '' : 'none'~>~r Achievements.getAchievementName(5, 6) ~ (~r Achievements.achievementStatusDescription(5, 6) ~): Gain permanence.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 7) ? '' : 'none'~>~r Achievements.getAchievementName(5, 7) ~ (~r Achievements.achievementStatusDescription(5, 7) ~): Eternity for ~i Math.pow(2, 256) ~ EP while in Eternity Challenge ~o 1 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(5, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(5, 8) ? '' : 'none'~>~r Achievements.getAchievementName(5, 8) ~ (~r Achievements.achievementStatusDescription(5, 8) ~): Unlock chroma.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 1) ? '' : 'none'~>~r Achievements.getAchievementName(6, 1) ~ (~r Achievements.achievementStatusDescription(6, 1) ~): Complete all eternity challenges (~i 4 ~ times each).</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 2) ? '' : 'none'~>~r Achievements.getAchievementName(6, 2) ~ (~r Achievements.achievementStatusDescription(6, 2) ~): Get ~i Decimal.pow(9, Math.pow(9, 9)) ~ stars.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 3) ? '' : 'none'~>~r Achievements.getAchievementName(6, 3) ~ (~r Achievements.achievementStatusDescription(6, 3) ~): Have all the studies in the first three rows at once.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 4) ? '' : 'none'~>~r Achievements.getAchievementName(6, 4) ~ (~r Achievements.achievementStatusDescription(6, 4) ~): Get at least ~i 1 ~ permanence per eternity.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 5) ? '' : 'none'~>~r Achievements.getAchievementName(6, 5) ~ (~r Achievements.achievementStatusDescription(6, 5) ~): Complexity.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 6) ? '' : 'none'~>~r Achievements.getAchievementName(6, 6) ~ (~r Achievements.achievementStatusDescription(6, 6) ~): Complexity in ~ts Math.pow(2, 16) ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 7) ? '' : 'none'~>~r Achievements.getAchievementName(6, 7) ~ (~r Achievements.achievementStatusDescription(6, 7) ~): Complete a complexity achievement.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(6, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(6, 8) ? '' : 'none'~>~r Achievements.getAchievementName(6, 8) ~ (~r Achievements.achievementStatusDescription(6, 8) ~): Complete all the complexity achievements.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 1) ? '' : 'none'~>~r Achievements.getAchievementName(7, 1) ~ (~r Achievements.achievementStatusDescription(7, 1) ~): Get ~i 256 ~ complexities.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 2) ? '' : 'none'~>~r Achievements.getAchievementName(7, 2) ~ (~r Achievements.achievementStatusDescription(7, 2) ~): Complexity for ~i 16 ~ ℂP without unlocking red.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 3) ? '' : 'none'~>~r Achievements.getAchievementName(7, 3) ~ (~r Achievements.achievementStatusDescription(7, 3) ~): Complexity while in all ~i 6 ~ complexity challenges.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 4) ? '' : 'none'~>~r Achievements.getAchievementName(7, 4) ~ (~r Achievements.achievementStatusDescription(7, 4) ~): Unlock powers.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 5) ? '' : 'none'~>~r Achievements.getAchievementName(7, 5) ~ (~r Achievements.achievementStatusDescription(7, 5) ~): Have ~i 12 ~ total powers (equipped and stored powers, not counting deleted powers).</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 6) ? '' : 'none'~>~r Achievements.getAchievementName(7, 6) ~ (~r Achievements.achievementStatusDescription(7, 6) ~): Unlock the Oracle.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 7) ? '' : 'none'~>~r Achievements.getAchievementName(7, 7) ~ (~r Achievements.achievementStatusDescription(7, 7) ~): Craft a power.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(7, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(7, 8) ? '' : 'none'~>~r Achievements.getAchievementName(7, 8) ~ (~r Achievements.achievementStatusDescription(7, 8) ~): Unlock galaxies.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 1) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 1) ? '' : 'none'~>~r Achievements.getAchievementName(8, 1) ~ (~r Achievements.achievementStatusDescription(8, 1) ~): Get a power with rarity at least ~i 3 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 2) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 2) ? '' : 'none'~>~r Achievements.getAchievementName(8, 2) ~ (~r Achievements.achievementStatusDescription(8, 2) ~): Have the eternity power extra multiplier reach its cap (which is ~i 3 ~).</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 3) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 3) ? '' : 'none'~>~r Achievements.getAchievementName(8, 3) ~ (~r Achievements.achievementStatusDescription(8, 3) ~): Have the time for the galaxy effect to cap be at least ~ts 18000 ~ (you don't have to wait for the galaxy effect to actually reach the cap).</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 4) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 4) ? '' : 'none'~>~r Achievements.getAchievementName(8, 4) ~ (~r Achievements.achievementStatusDescription(8, 4) ~): Finality.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 5) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 5) ? '' : 'none'~>~r Achievements.getAchievementName(8, 5) ~ (~r Achievements.achievementStatusDescription(8, 5) ~): Finality in ~ts Math.pow(2, 16) ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 6) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 6) ? '' : 'none'~>~r Achievements.getAchievementName(8, 6) ~ (~r Achievements.achievementStatusDescription(8, 6) ~): Get finality shard upgrade starting bonuses to a strength of ~i 16 ~.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 7) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 7) ? '' : 'none'~>~r Achievements.getAchievementName(8, 7) ~ (~r Achievements.achievementStatusDescription(8, 7) ~): Complete all finality milestones.</span>
        <br ~style.display=Achievements.showAchievementDescriptionBelow(8, 8) ? '' : 'none'~/>
        <span ~style.display=Achievements.showAchievementDescriptionBelow(8, 8) ? '' : 'none'~>~r Achievements.getAchievementName(8, 8) ~ (~r Achievements.achievementStatusDescription(8, 8) ~): Buy the maximum possible of all finality shard upgrades.</span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'statistics' ? '' : 'none'~>
      <span>You have produced ~f player.stats.totalStarsProduced ~ total stars.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have produced ~f player.stats.totalStarsProducedThisEternity ~ stars this eternity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have produced ~f player.stats.totalStarsProducedThisComplexity ~ stars this complexity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have produced ~f player.stats.totalStarsProducedThisFinality ~ stars this finality.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>You have produced ~i player.stats.totalIPProduced ~ total infinity point~s player.stats.totalIPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have produced ~i player.stats.totalIPProducedThisEternity ~ infinity point~s player.stats.totalIPProducedThisEternity ~ this eternity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have produced ~i player.stats.totalEPProduced ~ total eternity point~s player.stats.totalEPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have produced ~i player.stats.totalEPProducedThisComplexity ~ total eternity point~s player.stats.totalEPProducedThisComplexity ~ this complexity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have produced ~i player.stats.totalCPProduced ~ total complexity point~s player.stats.totalCPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have produced ~i player.stats.totalCPProducedThisFinality ~ total complexity point~s player.stats.totalCPProducedThisFinality ~ this finality.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have produced ~i player.stats.totalFPProduced ~ total finality point~s player.stats.totalFPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>You have ~i player.infinities ~ infinit~y player.infinities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have ~q player.eternities ~ eternit~y player.eternities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have ~i player.complexities ~ complexit~y player.complexities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have ~i player.finalities ~ finalit~y player.finalities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>Your fastest infinity took ~t player.stats.fastestInfinity ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Your fastest eternity took ~t player.stats.fastestEternity ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>Your fastest complexity took ~t player.stats.fastestComplexity ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>Your fastest finality took ~t player.stats.fastestFinality ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('sacrifice') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('sacrifice') ? '' : 'none'~>You have spent ~t player.stats.timeSinceSacrifice ~ without sacrificing.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('prestige') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('prestige') ? '' : 'none'~>You have spent ~t player.stats.timeSincePrestige ~ in this prestige.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>You have spent ~t player.stats.timeSinceInfinity ~ in this infinity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have spent ~t player.stats.timeSinceEternity ~ in this eternity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have spent ~t player.stats.timeSinceComplexity ~ in this complexity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have spent ~t player.stats.timeSinceFinality ~ in this finality.</span>
      <br/>
      <span>You have spent ~t player.stats.onlineTimeSinceGameStart ~ playing this game (only counting time online).</span>
      <br/>
      <span>You have spent ~t player.stats.timeSinceGameStart ~ playing this game (counting time offline).</span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'last-ten-runs' ? '' : 'none'~>
      <div ~style.display=Stats.showRun(1, 'infinity') ? '' : 'none'~>
        <loop i 1 20>
          % (@i > 1) ? `<br ~style.display=Stats.showRun(${@i}, 'infinity') ? '' : 'none'~/>` : "" %
          <span% (@i > 1) ? ` ~style.display=Stats.showRun(${@i}, 'infinity') ? '' : 'none'~` : "" %>% (@i > 1) ? `The infinity ${@numbers[@i]} infinities ago` : "Last infinity" % took ~t player.stats.lastTenInfinities[% @i - 1 %][0] ~ and gave ~i player.stats.lastTenInfinities[% @i - 1 %][1] ~ IP, giving <span ~style.display=InfinityPrestigeLayer.showLog('last-ten') ? '' : 'none'~>~f Stats.getLogPerSec(player.stats.lastTenInfinities[% @i - 1 %][0], player.stats.lastTenInfinities[% @i - 1 %][1], player.stats.lastTenInfinities[% @i - 1 %][3], true) ~ log IP/second.</span><span ~style.display=InfinityPrestigeLayer.showLog('last-ten') ? 'none' : ''~>~f player.stats.lastTenInfinities[% @i - 1 %][2] ~ IP/second.</span></span>
        </loop>
      </div>
      <br ~style.display=Stats.showRunBreak('eternity') ? '' : 'none'~/>
      <div ~style.display=Stats.showRun(1, 'eternity') ? '' : 'none'~>
        <loop i 1 20>
          % (@i > 1) ? `<br ~style.display=Stats.showRun(${@i}, 'eternity') ? '' : 'none'~/>` : "" %
          <span% (@i > 1) ? ` ~style.display=Stats.showRun(${@i}, 'eternity') ? '' : 'none'~` : "" %>% (@i > 1) ? `The eternity ${@numbers[@i]} eternities ago` : "Last eternity" % took ~t player.stats.lastTenEternities[% @i - 1 %][0] ~ and gave ~i player.stats.lastTenEternities[% @i - 1 %][1] ~ EP, giving <span ~style.display=EternityPrestigeLayer.showLog('last-ten') ? '' : 'none'~>~f Stats.getLogPerSec(player.stats.lastTenEternities[% @i - 1 %][0], player.stats.lastTenEternities[% @i - 1 %][1], player.stats.lastTenEternities[% @i - 1 %][3], true) ~ log EP/second.</span><span ~style.display=EternityPrestigeLayer.showLog('last-ten') ? 'none' : ''~>~f player.stats.lastTenEternities[% @i - 1 %][2] ~ EP/second.</span></span>
        </loop>
      </div>
      <br ~style.display=Stats.showRunBreak('complexity') ? '' : 'none'~/>
      <div ~style.display=Stats.showRun(1, 'complexity') ? '' : 'none'~>
        <loop i 1 20>
          % (@i > 1) ? `<br ~style.display=Stats.showRun(${@i}, 'complexity') ? '' : 'none'~/>` : "" %
          <span% (@i > 1) ? ` ~style.display=Stats.showRun(${@i}, 'complexity') ? '' : 'none'~` : "" %>% (@i > 1) ? `The complexity ${@numbers[@i]} complexities ago` : "Last complexity" % took ~t player.stats.lastTenComplexities[% @i - 1 %][0] ~ and gave ~i player.stats.lastTenComplexities[% @i - 1 %][1] ~ ℂP, giving <span ~style.display=ComplexityPrestigeLayer.showLog('last-ten') ? '' : 'none'~>~f Stats.getLogPerSec(player.stats.lastTenComplexities[% @i - 1 %][0], player.stats.lastTenComplexities[% @i - 1 %][1], player.stats.lastTenComplexities[% @i - 1 %][3], true) ~ log ℂP/second.</span><span ~style.display=ComplexityPrestigeLayer.showLog('last-ten') ? 'none' : ''~>~f player.stats.lastTenComplexities[% @i - 1 %][2] ~ ℂP/second.</span></span>
        </loop>
      </div>
      <br ~style.display=Stats.showRunBreak('finality') ? '' : 'none'~/>
      <div ~style.display=Stats.showRun(1, 'finality') ? '' : 'none'~>
        <loop i 1 20>
          % (@i > 1) ? `<br ~style.display=Stats.showRun(${@i}, 'finality') ? '' : 'none'~/>` : "" %
          <span% (@i > 1) ? ` ~style.display=Stats.showRun(${@i}, 'finality') ? '' : 'none'~` : "" %>% (@i > 1) ? `The finality ${@numbers[@i]} finalities ago` : "Last finality" % took ~t player.stats.lastTenFinalities[% @i - 1 %][0] ~ and gave ~i player.stats.lastTenFinalities[% @i - 1 %][1] ~ FP and ~i player.stats.lastTenFinalities[% @i - 1 %][2] ~ FS.</span>
        </loop>
      </div>
      <br/>
      <br/>
      <span>
        Run types to show:
        <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>Infinity: <input type="checkbox" ~!checked=Stats.showRunType('infinity')~ ~!onchange=function() {Stats.setShowRunType('infinity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Eternity: <input type="checkbox" ~!checked=Stats.showRunType('eternity')~ ~!onchange=function() {Stats.setShowRunType('eternity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>Complexity: <input type="checkbox" ~!checked=Stats.showRunType('complexity')~ ~!onchange=function() {Stats.setShowRunType('complexity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>Finality: <input type="checkbox" ~!checked=Stats.showRunType('finality')~ ~!onchange=function() {Stats.setShowRunType('finality', this.checked)}~></input></span>
      </span>
      <br/>
      <span>Number of last runs of each type to show (maximum ~i 20 ~): <input type="text" class="last-runs-to-show" ~!value=NotationOptions.format('last-runs-to-show')~ ~!onchange=function() {Stats.setLastRunsToShow(NotationOptions.read('last-runs-to-show', this.value))}~></input></span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'options' ? '' : 'none'~>
      <span><button ~class-name=Options.showExportNotification() ? 'redspan' : ''~ onclick="Options.setOptionTypeShown('saving')">Show saving options</button> <button onclick="Options.setOptionTypeShown('color')">Show color options</button> <button onclick="Options.setOptionTypeShown('tab')">Show tab options</button> <button onclick="Options.setOptionTypeShown('other')">Show other options</button></span>
      <br/>
      <button ~style.display=Explanations.isVisible('options', 'offline') ? '' : 'none'~ onclick="Explanations.showOrHide('options', 'offline')">Offline progress explanation: ~r Explanations.isShown('options', 'offline') ? 'Shown' : 'Hidden' ~</button>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;" ~style.display=Explanations.isShown('options', 'offline') ? '' : 'none'~>
        <span>When you're online, every ~t 0.064 ~ the game updates variable values and produces stuff. These updates are called ticks.</span>
        <br/>
        <br/>
        <span>When you go offline and come back to the game, if you have offline progress on, this game (like most similar games) does some number of "offline ticks" partially based on how long you were offline. They're called "offline ticks" because they each update and produce stuff like online ticks, but they "happened" while you were offline, in some sense (even though they're only done when you return).</span>
        <br/>
        <br/>
        <span>If you were offline for long enough, it's often impractical to do as many offline ticks as there would've been ticks. E.g., if you're offline for ~ts 86400 ~, there'd be ~i 1350000 ~ ticks over a day; if each takes ~t 0.001 ~, then together they'd take ~i 1350 ~, which is fairly long. So the "offline ticks" option makes the game do at most as many offline ticks as its value, making each offline tick longer (i.e. give you more production) to compensate.</span>
        <br/>
        <br/>
        <span>Note that if you're offline for a short enough time, or have the "offline ticks" option high enough, that the number of online ticks over that time would be less than the "offline ticks" option, the game does the number of online ticks instead. For example, if you're offline for ~ts 3600 ~ and the option is ~i 100000 ~, the number of ticks over ~ts 3600 ~ is generally ~i 56250 ~, so the game would only do ~i 56250 ~ ticks.</span>
        <br/>
        <br/>
        <span>Note also that the offline ticks input box, like most input boxes, uses default Scientific notation settings for its input.</span>
        <br/>
        <br/>
      </div>
      <table ~style.display=Options.isOptionTypeShown('saving') ? '' : 'none'~ style="margin-left: auto; margin-right: auto; border-spacing: 24px 8px; border-collapse: separate;">
        <tr>
          <td><button class="options-button" onclick="Saving.saveGame(false, true)">Save</button></td>
          <td>
            <button class="options-button" onclick="Saving.loadGamePrompt()" ~style.display=Options.loadFromTextInput() ? 'none' : ''~>Load</button>
            <div class="options-div" ~style.display=Options.loadFromTextInput() ? '' : 'none'~>
              <span>Enter your save:</span>
              <br/>
              <input type="text" class="load-input"></input>
              <br/>
              <br/>
              <button onclick="Saving.loadGameTextInput()">Load</button>
            </div>
          </td>
          <td><button ~class-name=Options.showExportNotification() ? 'options-button export-button redspan' : 'options-button export-button'~ onclick="Saving.exportGame(1)">Export</button></td>
        </tr>
        <tr>
          <td><button class="options-button" onclick="Options.toggleOfflineProgress()">Offline progress: ~r Options.offlineProgress() ? "On" : "Off" ~</button></td>
          <td><div class="options-div">
            <button class="mini-options-button" onclick="Options.toggleExportCopy()">Copy export text: ~r player.options.exportCopy ? "On" : "Off" ~</button>
            <button class="mini-options-button" onclick="Options.toggleExportDownload()">Download export text: ~r player.options.exportDownload ? "On" : "Off" ~</button>
            <button class="mini-options-button" onclick="Options.toggleExportShow()">Show export text: ~r player.options.exportShow ? "On" : "Off" ~</button>
            <button class="mini-options-button" onclick="Options.toggleLoadMode()">Save loading mode <span class="helpspan">(?)<span class="tooltiptext">This option lets you decide whether to load saves via an input box that appears when you click the Load button (Prompt) or via a text input that appears on this tab at all times (Text Input). Sometimes, Prompt can't handle saves on mobile due to their length but Text Input can.</span></span>: ~r Options.loadFromTextInput() ? "Text Input" : "Prompt" ~</button>
          </div></td>
          <td><div class="options-div">Show export reminder after X seconds (~i 0 ~ for never):<br/><input type="text" class="export-reminder" ~!value=NotationOptions.format('export-reminder')~ ~!onchange=function() {Options.setExportNotificationFrequency(NotationOptions.read('export-reminder', this.value))}~></input></div></td>
        </tr>
        <tr>
          <td><div class="options-div" style="font-size: 0.875rem;">Offline ticks (between ~i 1 ~ and ~i Options.maxTicks() ~, slow above ~i 1024 ~, very slow above ~i Math.pow(2, 16) ~):<br/><input type="text" class="offline-ticks" ~!value=NotationOptions.format('offline-ticks')~ ~!onchange=function() {Options.setOfflineTicks(NotationOptions.read('offline-ticks', this.value))}~></input></div></td>
          <td><button class="options-button" onclick="Saving.resetGameWithConfirmation()">RESET THE GAME</button></td>
          <td/>
        </tr>
      </table>
      <div ~style.display=Options.isOptionTypeShown('color') ? '' : 'none'~>
        <table ~style.display=Options.isOptionTypeShown('color') ? '' : 'none'~ style="margin-left: auto; margin-right: auto; border-spacing: 24px 8px; border-collapse: separate;">
          <tr>
            <td><div class="options-div">
              <span>Clicked button outlines: <select ~!value=Options.buttonOutlines()~ ~!onchange=function() {Options.setButtonOutlines(this.value)}~>
                <option value="None">None</option>
                <option value="Black">Black</option>
                <option value="Cyan">Cyan</option>
                <option value="White">White</option>
                <option value="Blue">Blue</option>
                <option value="Gold">Gold</option>
              </select></span></div>
            </td>
            <td><div class="options-div">
              <button class="mini-options-button" onclick="Options.nextBackground()">Background: ~r player.options.theme.background ~</button>
              <button class="mini-options-button" onclick="Options.nextButtonColor()">Button colors: ~r player.options.theme.buttonColor ~</button>
              <button class="mini-options-button" onclick="Options.nextCompletionGradients()">Completion gradients: ~r player.options.theme.completionGradients ~</button>
              <button class="mini-options-button" onclick="Options.nextEdgeGradients()">Edge gradients: ~r player.options.theme.edgeGradients ~</button>
            </div></td>
            <td><button class="options-button" onclick="Options.nextColorChange()">Color change: ~r Options.colorChange() ~</button></td>
          </tr>
          <tr>
            <td><button class="options-button" onclick="Options.toggleAdjustColors()">
              Adjust text colors too close to background: ~r Options.adjustColors() ? "On" : "Off" ~
            </button></td>
            <td><div class="options-div">
              <button class="mini-options-button" onclick="Options.toggleTabColors()">Tab colors: ~r Options.tabColors() ? 'On' : 'Off' ~</button>
              <button class="mini-options-button" onclick="Options.togglePresetHighlightColors()">Preset highlight colors: ~r Options.presetHighlightColors() ? 'On' : 'Off' ~</button>
              <button class="mini-options-button" ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ onclick="Options.nextCompletionColors()">Completion colors: ~r player.options.completionColors ~</button>
              <button class="mini-options-button" ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ onclick="Options.toggleResetColors()">Reset colors: ~r Options.resetColors() ? 'On' : 'Off' ~</button>
            </div></td>
            <td><button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~ class="options-button" onclick="Options.toggleComplexityChallengeRunningColors()" style="font-size: 0.875rem;">
              Complexity challenge colors: ~r Options.complexityChallengeRunningColors() ? "Running" : "Completions" ~
            </button></td>
          </tr>
        </table>
        <br/>
        <br/>
        <span>Change the values of colors:</span>
        <br/>
        <br/>
        <table style="margin-left: auto; margin-right: auto; width: 86%;">
          <colgroup>
             <col span="1" style="width: 6%;">
             <col span="1" style="width: 27%;">
             <col span="1" style="width: 8%;">
             <col span="1" style="width: 5%;">
             <col span="1" style="width: 27%;">
             <col span="1" style="width: 8%;">
             <col span="1" style="width: 5%;">
          </colgroup>
          <loop i 0 9>
            <tr>
              <td>% @titleColors[@i] %</td>
              <td ~style.color=Colors.adjust(Colors.getStringToColorCode('% @colors[@i] %', 'Dull'))~>Dull % @colors[@i] % (~r Colors.displayStringToColorCode('% @colors[@i] %', 'Dull') ~):</td>
              <td><input type="text" class="% @colors[@i] %-dull-input" style="width: 80px;" ~!value=Options.colorSetting('% @colors[@i] %', 'Dull', false)~ ~!onchange=function() {Options.setColorSetting('% @colors[@i] %', 'Dull', this.value, false)}~></input></td>
              <td><input type="color" class="% @colors[@i] %-dull-input" ~!value=Options.colorSetting('% @colors[@i] %', 'Dull', true)~ ~!onchange=function() {Options.setColorSetting('% @colors[@i] %', 'Dull', this.value, false)}~></input></td>
              <td ~style.color=Colors.adjust(Colors.getStringToColorCode('% @colors[@i] %', 'Vibrant'))~>Vibrant % @colors[@i] % (~r Colors.displayStringToColorCode('% @colors[@i] %', 'Vibrant') ~):</td>
              <td><input type="text" class="% @colors[@i] %-vibrant-input" style="width: 80px;" ~!value=Options.colorSetting('% @colors[@i] %', 'Vibrant', false)~ ~!onchange=function() {Options.setColorSetting('% @colors[@i] %', 'Vibrant', this.value, false)}~></input></td>
              <td><input type="color" class="% @colors[@i] %-vibrant-input" ~!value=Options.colorSetting('% @colors[@i] %', 'Vibrant', true)~ ~!onchange=function() {Options.setColorSetting('% @colors[@i] %', 'Vibrant', this.value, false)}~></input></td>
            </tr>
          </loop>
        </table>
        <br/>
        <br/>
        <span><button class="colors-export-button" onclick="ColorPreset.export()">Export color scheme</button> <button onclick="ColorPreset.import()">Import color scheme</button> <button onclick="ColorPreset.returnToDefault()">Return to default color scheme</button></span>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>Click on the name of a color preset on the line below to use that color scheme:</span>
          <br/>
          <loop i 1 32>
            <button ~class=ColorPreset.presetClass(% @i %)~ ~style.display=ColorPreset.hasPreset(% @i %) ? '' : 'none'~ onclick="ColorPreset.presetLoad(% @i %)">~r ColorPreset.presetName(% @i %) ~</button>
          </loop>
          <div ~style.display=ColorPreset.hasPreset(1) ? 'none' : ''~>
            You don't currently have any color presets.
          </div>
        </div>
        <span>Color presets (<button onclick="ColorPreset.presetSort()">sort by name</button>):</span>
        <loop i 1 32>
          <div ~style.display=ColorPreset.hasPreset(% @i %) ? '' : 'none'~>
            Name: <input class="presetcolorname% @i %" type="text" ~!value=ColorPreset.presetName(% @i %)~ ~!onchange=function() {ColorPreset.setPresetName(% @i %, this.value)}~></input>
            Color scheme: <input class="presetcolorscheme% @i %" style="width: 256px;" type="text" ~!value=ColorPreset.presetColors(% @i %)~ ~!onchange=function() {ColorPreset.setPresetColors(% @i %, this.value)}~></input>
            <button % (@i === 1) ? 'class="disabled" ' : '' %onclick="ColorPreset.presetMoveUp(% @i %)">↑</button>
            <button % (@i === 32) ? `class="disabled"` : `~class=ColorPreset.hasPreset(${@i + 1}) ? "" : "disabled"~` % onclick="ColorPreset.presetMoveDown(% @i %)">↓</button>
            <button onclick="ColorPreset.presetLoad(% @i %)">Load</button>
            <button onclick="ColorPreset.presetSetToCurrentColors(% @i %)">Change to current color scheme</button>
            <button onclick="ColorPreset.presetDelete(% @i %)">Delete</button>
          </div>
        </loop>
        <span>
          <button ~style.display=ColorPreset.hasPreset(32) ? 'none' : ''~ onclick="ColorPreset.presetCreate()">Create a color preset</button>
          <span ~style.display=ColorPreset.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ color presets. Delete existing presets to create more.</span>
        </span>
        <br class="colorpresetbr" style="display: none;"/>
        <span style="display: none;">Exported tabs to show (also copied to clipboard): <input id="colors-export-output"></input></span>
      </div>
      <div ~style.display=Options.isOptionTypeShown('tab') ? '' : 'none'~>
        <span>Use tab groups <span class="helpspan">(?)<span class="tooltiptext">This option, rather than showing all the tabs at once, will divide the tabs into groups and let you switch between viewing various groups, similarly to Antimatter Dimension's tab handling. A tab group will be shown if and only if its tab with generators is shown (Miscellaneous is always shown).</span></span>: <input type="checkbox" ~!checked=Tabs.usingTabGroups()~ ~!onchange=function() {Tabs.setUsingTabGroups(this.checked)}~></input></span>
        <br/>
        <span>Tabs to show:</span>
        <div>
          <span>
            <span ~style.display=Tabs.isTabOptionVisible('main') ? '' : 'none'~>Main: <input class="main-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('main')~ ~!onchange=function() {Tabs.setTabOption('main', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('infinity') ? '' : 'none'~>Infinity Generators: <input class="infinity-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('infinity')~ ~!onchange=function() {Tabs.setTabOption('infinity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('normal-challenges') ? '' : 'none'~>Normal Challenges: <input class="normal-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('normal-challenges')~ ~!onchange=function() {Tabs.setTabOption('normal-challenges', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('autobuyers') ? '' : 'none'~>Autobuyers: <input class="autobuyers-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('autobuyers')~ ~!onchange=function() {Tabs.setTabOption('autobuyers', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('infinity-challenges') ? '' : 'none'~>Infinity Challenges: <input class="infinity-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('infinity-challenges')~ ~!onchange=function() {Tabs.setTabOption('infinity-challenges', this.checked)}~></input></span>
          </span>
        </div>
        <div>
          <span>
            <span ~style.display=Tabs.isTabOptionVisible('goals') ? '' : 'none'~>Goals: <input class="goals-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('goals')~ ~!onchange=function() {Tabs.setTabOption('goals', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('achievements') ? '' : 'none'~>Achievements: <input class="achievements-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('achievements')~ ~!onchange=function() {Tabs.setTabOption('achievements', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('statistics') ? '' : 'none'~>Statistics: <input class="statistics-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('statistics')~ ~!onchange=function() {Tabs.setTabOption('statistics', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('last-ten-runs') ? '' : 'none'~>Last ~r title(numbers[Stats.lastRunsToShow()]) ~ Run~s Stats.lastRunsToShow() ~: <input class="last-ten-runs-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('last-ten-runs')~ ~!onchange=function() {Tabs.setTabOption('last-ten-runs', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('options') ? '' : 'none'~>Options: cannot be hidden</span>
          </span>
        </div>
        <div ~style.display=Tabs.isTabOptionVisible('eternity') ? '' : 'none'~>
          <span>
            <span ~style.display=Tabs.isTabOptionVisible('eternity') ? '' : 'none'~>Eternity Generators: <input class="eternity-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity')~ ~!onchange=function() {Tabs.setTabOption('eternity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('eternity-milestones') ? '' : 'none'~>Eternity Milestones: <input class="eternity-milestones-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity-milestones')~ ~!onchange=function() {Tabs.setTabOption('eternity-milestones', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('studies') ? '' : 'none'~>Studies: <input class="studies-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('studies')~ ~!onchange=function() {Tabs.setTabOption('studies', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('eternity-producer') ? '' : 'none'~>Eternity Producer: <input class="eternity-producer-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity-producer')~ ~!onchange=function() {Tabs.setTabOption('eternity-producer', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('eternity-challenges') ? '' : 'none'~>Eternity Challenges: <input class="eternity-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity-challenges')~ ~!onchange=function() {Tabs.setTabOption('eternity-challenges', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('chroma') ? '' : 'none'~>Chroma: <input class="chroma-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('chroma')~ ~!onchange=function() {Tabs.setTabOption('chroma', this.checked)}~></input></span>
          </span>
        </div>
        <div ~style.display=Tabs.isTabOptionVisible('complexity') ? '' : 'none'~>
          <span>
            <span ~style.display=Tabs.isTabOptionVisible('complexity') ? '' : 'none'~>Complexity Generators: <input class="complexity-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('complexity')~ ~!onchange=function() {Tabs.setTabOption('complexity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('complexity-challenges') ? '' : 'none'~>Complexity Challenges: <input class="complexity-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('complexity-challenges')~ ~!onchange=function() {Tabs.setTabOption('complexity-challenges', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('complexity-achievements') ? '' : 'none'~>Complexity Achievements: <input class="complexity-achievements-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('complexity-achievements')~ ~!onchange=function() {Tabs.setTabOption('complexity-achievements', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('powers') ? '' : 'none'~>Powers: <input class="powers-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('powers')~ ~!onchange=function() {Tabs.setTabOption('powers', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('oracle') ? '' : 'none'~>Oracle: <input class="oracle-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('oracle')~ ~!onchange=function() {Tabs.setTabOption('oracle', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('galaxies') ? '' : 'none'~>Galaxies: <input class="galaxies-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('galaxies')~ ~!onchange=function() {Tabs.setTabOption('galaxies', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          </span>
        </div>
        <div ~style.display=Tabs.isTabOptionVisible('finality') ? '' : 'none'~>
          <span>
            <span ~style.display=Tabs.isTabOptionVisible('finality') ? '' : 'none'~>Finality Generators: <input class="finality-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('finality')~ ~!onchange=function() {Tabs.setTabOption('finality', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('finality-shards') ? '' : 'none'~>Finality Shards: <input class="finality-shards-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('finality-shards')~ ~!onchange=function() {Tabs.setTabOption('finality-shards', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
            <span ~style.display=Tabs.isTabOptionVisible('finality-milestones') ? '' : 'none'~>Finality Milestones: <input class="finality-milestones-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('finality-milestones')~ ~!onchange=function() {Tabs.setTabOption('finality-milestones', this.checked)}~></input></span>
          </span>
        </div>
        <span><button class="tabs-export-button" onclick="Tabs.export()">Export tabs to show</button> <button onclick="Tabs.import()">Import tabs to show</button> <button onclick="Tabs.showAllUnlockedTabs()">Show all unlocked tabs</button></span>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>Click on the name of a tab preset on the line below to show those tabs:</span>
          <br/>
          <loop i 1 32>
            <button ~class=Tabs.presetClass(% @i %)~ ~style.display=Tabs.hasPreset(% @i %) ? '' : 'none'~ onclick="Tabs.presetLoad(% @i %)">~r Tabs.presetName(% @i %) ~</button>
          </loop>
          <div ~style.display=Tabs.hasPreset(1) ? 'none' : ''~>
            You don't currently have any tab presets.
          </div>
        </div>
        <span>Tab presets (<button onclick="Tabs.presetSort()">sort by name</button>):</span>
        <loop i 1 32>
          <div ~style.display=Tabs.hasPreset(% @i %) ? '' : 'none'~>
            Name: <input class="presettabname% @i %" type="text" ~!value=Tabs.presetName(% @i %)~ ~!onchange=function() {Tabs.setPresetName(% @i %, this.value)}~></input>
            Tabs to show: <input class="presettablist% @i %" style="width: 256px;" type="text" ~!value=Tabs.presetTabs(% @i %)~ ~!onchange=function() {Tabs.setPresetTabs(% @i %, this.value)}~></input>
            <button % (@i === 1) ? 'class="disabled" ' : '' %onclick="Tabs.presetMoveUp(% @i %)">↑</button>
            <button % (@i === 32) ? `class="disabled"` : `~class=Tabs.hasPreset(${@i + 1}) ? "" : "disabled"~` % onclick="Tabs.presetMoveDown(% @i %)">↓</button>
            <button onclick="Tabs.presetLoad(% @i %)">Load</button>
            <button onclick="Tabs.presetSetToCurrentTabs(% @i %)">Change to currently shown tabs</button>
            <button onclick="Tabs.presetDelete(% @i %)">Delete</button>
          </div>
        </loop>
        <span>
          <button ~style.display=Tabs.hasPreset(32) ? 'none' : ''~ onclick="Tabs.presetCreate()">Create a tab preset</button>
          <span ~style.display=Tabs.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ tab presets. Delete existing presets to create more.</span>
        </span>
        <br class="tabpresetbr" style="display: none;"/>
        <span style="display: none;">Exported tabs to show (also copied to clipboard): <input id="tabs-export-output"></input></span>
      </div>
      <table ~style.display=Options.isOptionTypeShown('other') ? '' : 'none'~ style="margin-left: auto; margin-right: auto; border-spacing: 24px 8px; border-collapse: separate;">
        <tr>
          <td>
            <div class="options-div">
              <span style="font-size: 0.75rem;">Notation <span class="helpspan">(?)<span class="tooltiptext" style="font-size: 0.75rem;">The game uses theses settings for almost all numbers it displays. Numbers in text inputs boxes use default notation settings by default, but there are options to change that.</span></span>: <select ~!value=NotationOptions.notation()~ ~!onchange=function() {NotationOptions.setNotation(this.value)}~>
              <option value="Scientific">Scientific</option>
              <option value="Engineering">Engineering</option>
              <option value="Logarithm">Logarithm</option>
              <option value="Letters">Letters</option>
              <option value="Standard">Standard</option>
              <option value="Emoji">Emoji</option>
              <option value="Mixed Scientific">Mixed Scientific</option>
              <option value="Mixed Engineering">Mixed Engineering</option>
              <option value="Mixed Logarithm (Sci)">Mixed Logarithm (Sci)</option>
              <option value="Evil">Evil</option>
              <option value="Brackets">Brackets</option>
              <option value="Infinity">Infinity</option>
              <option value="Roman">Roman</option>
              <option value="Dots">Dots</option>
              <option value="Zalgo">Zalgo</option>
              <option value="Hex">Hex</option>
              <option value="Imperial">Imperial</option>
              <option value="Clock">Clock</option>
              <option value="Prime">Prime</option>
              <option value="Bar">Bar</option>
              <option value="Shi">Shi</option>
              <option value="Blind">Blind</option>
            </select></span>
            <br/>
            <span style="font-size: 0.75rem;">Display base <span class="helpspan">(?)<span class="tooltiptext">This base is used for displaying the values of the mantissa and exponent, so if it's 2 and the exponent base is 10, 1e10 is 100. It must be between 2 and 36. If you surround it in quotes or dashes, it'll be used as a list of digits rather than a base.</span></span>: <input type="text" ~!value=NotationOptions.rawDisplayBase()~ ~!onchange=function() {NotationOptions.setDisplayBase(this.value)}~/></span>
            <br/>
            <span style="font-size: 0.75rem;">Exponent base <span class="helpspan">(?)<span class="tooltiptext">This base is used for calculating the value of the exponent, so if it's 16 and the display base is 10, 1e2 is 256.</span></span>: <input type="text" ~!value=NotationOptions.exponentBase()~ ~!onchange=function() {NotationOptions.setExponentBase(+this.value)}~/></span>
            <br/>
            <span style="font-size: 0.75rem;">Alphabet <span class="helpspan">(?)<span class="tooltiptext">This is used for Letters notation as the list of letters to use.</span></span>: <input type="text" ~!value=NotationOptions.alphabet()~ ~!onchange=function() {NotationOptions.setAlphabet(this.value)}~/></span>
          </div></td>
          <td><div class="options-div">Digits of precision:
            <br/>
            Usual: <input type="text" class="lower-precision" ~!value=NotationOptions.format('lower-precision')~ ~!onchange=function() {NotationOptions.setLowerPrecision(NotationOptions.read('lower-precision', this.value))}~></input>
            <br/>
            Higher <span class="helpspan">(?)<span class="tooltiptext">This is used for some small values that are best shown precisely<span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~> (such as Normal Challenge ~o 3 ~ multiplier)</span>.</span></span>: <input type="text" class="higher-precision" ~!value=NotationOptions.format('higher-precision')~ ~!onchange=function() {NotationOptions.setHigherPrecision(NotationOptions.read('higher-precision', this.value))}~></input>
            <br/>
            Inputs <span class="helpspan">(?)<span class="tooltiptext">This is used for autobuyer inputs, and most other number inputs too.</span></span>: <input type="text" class="input-precision" ~!value=NotationOptions.format('input-precision')~ ~!onchange=function() {NotationOptions.setInputPrecision(NotationOptions.read('input-precision', this.value))}~></input>
          </div></td>
          <td><div class="options-div">
            <button class="mini-options-button" style="font-size: 0.75rem;" onclick="NotationOptions.toggleFormatOrdinals()">Format ordinals <span class="helpspan">(?)<span class="tooltiptext">These aren't Ordinal Markup's infinite ordinals, but e.g. generator numbers, or more generally things which are the nth of something.</span></span>: ~r NotationOptions.formatOrdinals() ? 'On' : 'Off' ~</button>
            <br/>
            <button class="mini-options-button" style="font-size: 0.75rem;" onclick="NotationOptions.toggleParseAutobuyersInCurrentBase()">Use base for AB settings <span class="helpspan">(?)<span class="tooltiptext">This option only affects the input for each autobuyer (AB). Also, it doesn't take into account notation (except for Hex); autobuyer inputs will generally still use Scientific, though they will take your base and exponent into account.</span></span>: ~r NotationOptions.parseAutobuyersInCurrentBase() ? 'On' : 'Off' ~</button>
            <button class="mini-options-button" style="font-size: 0.75rem;" onclick="NotationOptions.toggleParseInputsInCurrentBase()">Use base for other inputs <span class="helpspan">(?)<span class="tooltiptext">This option is like the above one for autobuyers, but affects all other number inputs (except the notation base and exponent ones, to avoid confusion).</span></span>: ~r NotationOptions.parseInputsInCurrentBase() ? 'On' : 'Off' ~</button>
          </div></td>
        </tr>
        <tr>
          <td><div class="options-div">
            <button class="semi-options-button" onclick="Options.nextTimeDisplay()" style="font-size: 0.875rem;">Time display: ~r player.options.timeDisplay ~<br/>(for example, ~t 83.125 ~)</button>
            <br/>
            <button class="wide-mini-options-button" onclick="Options.toggleNotationOnTimes()">Notation on times: ~r player.options.notationOnTimes ? "On" : "Off" ~</button></td>
          </div></td>
          <td><button class="options-button" onclick="Options.toggleHotkeys()">Hotkeys: ~r player.options.hotkeys ? "On" : "Off" ~</button></td>
          <td><button class="options-button" onclick="Options.toggleFitToWidth()">Decrease page size if page is too narrow: ~r player.options.fitToWidth ? "On" : "Off" ~</button></td>
        </tr>
        <tr>
          <td><button class="options-button" onclick="Options.toggleNews()">News (non-game-relevant messages at top of screen): ~r player.options.news ? "On" : "Off" ~</button></td>
          <td><button class="options-button" onclick="Options.toggleLargerCheckboxes()">Larger checkboxes: ~r player.options.largerCheckboxes ? "On" : "Off" ~</button></td>
          <td><div class="options-div">
            <button class="mini-options-button" onclick="Options.toggleNotifications('saveLoad')">Save/load notifications: ~r Options.showNotifications('saveLoad') ? 'On' : 'Off' ~</button>
            <button class="mini-options-button" onclick="Options.toggleNotifications('achievements')">Achievement notifications: ~r Options.showNotifications('achievements') ? 'On' : 'Off' ~</button>
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~ class="mid-options-button" onclick="Options.toggleNotifications('complexityAchievements')">Complexity achievement notifications: ~r Options.showNotifications('complexityAchievements') ? 'On' : 'Off' ~</button>
          </div></td>
        </tr>
        <tr>
          <td><div ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ class="options-div">
            <span>Log/second settings <span class="helpspan">(?)<span class="tooltiptext">This setting controls whether gain per second or log gain per second of things like IP is shown in various places. The default setting <span ~style.display=(Autobuyer(12).isUnlocked || PrestigeLayerProgress.hasReached('eternity')) ? 'none' : ''~>uses autobuyer settings.</span><span ~style.display=Options.optionDisplay(Autobuyer(12).isUnlocked || PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~>checks whether your relevant autobuyer is set to a mode that uses log/second.</span></span></span>:</span>
            <br/>
            <span>Header reset buttons: <select ~!value=Options.showLogSetting('reset-buttons')~ ~!onchange=function() {Options.setShowLogSetting('reset-buttons', this.value)}~>
              <option value="Default">Default</option>
              <option value="Off">Off</option>
              <option value="On">On</option>
            </select></span>
            <br/>
            <span>Last ~r title(numbers[Stats.lastRunsToShow()]) ~ Run~s Stats.lastRunsToShow() ~ tab: <select ~!value=Options.showLogSetting('last-ten')~ ~!onchange=function() {Options.setShowLogSetting('last-ten', this.value)}~>
              <option value="Default">Default</option>
              <option value="Off">Off</option>
              <option value="On">On</option>
            </select></span>
          </div></td>
          <td><div ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ class="options-div">Max all mode <span class="helpspan">(?)<span class="tooltiptext">This setting controls what the M hotkey buys, and also what the Main tab "Max all" button buys. It also controls what the G hotkey buys (that is, whatever generators the M hotkey would buy).</span></span>: <select ~!value=Options.maxAllMode()~ ~!onchange=function() {Options.setMaxAllMode(this.value)}~>
            <option value="Normal generators and boosts">Normal generators and boosts</option>
            <option value="Generators and upgrades in current tab">Generators and upgrades in current tab</option>
            <option value="Both">Both</option>
            <option value="All generators and upgrades">All generators and upgrades</option>
            <option value="All generators, upgrades, and unlocks">All generators, upgrades, and unlocks</option>
          </select></div></td>
          <td><div ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ class="options-div">
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ class="minier-options-button" onclick="Options.toggleShowCurrentChallenges()">Current challenges in header: ~r Options.showCurrentChallenges() ? 'Shown' : 'Hidden' ~</button>
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~ class="minier-options-button" onclick="Options.toggleShowNextCCCompletion()">Next ℂC completion in header: ~r Options.showNextCCCompletion() ? 'Shown' : 'Hidden' ~</button>
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ class="minier-options-button" onclick="Options.toggleShowResetButtonsForHiddenTabs()">Reset buttons for hidden tabs: ~r Options.showResetButtonsForHiddenTabs() ? 'Shown' : 'Hidden' ~</button>
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity')) ? '' : 'none'~ class="minier-options-button" onclick="Options.toggleSmallerHeader()">Smaller header: ~r Options.smallerHeader() ? 'On' : 'Off' ~</button>
          </div></td>
        </tr>
        <tr ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~>
          <td/>
          <td><div ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~ class="options-div">
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~ class="mini-options-button" onclick="Options.toggleShowFullOptions('studies')">Full study options: ~r Options.showFullOptions('studies') ? 'On' : 'Off' ~</button>
            <button ~style.display=Options.optionDisplay(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~ class="mini-options-button" onclick="Options.toggleShowFullOptions('powers')">Full power options: ~r Options.showFullOptions('powers') ? 'On' : 'Off' ~</button>
            <button ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~ class="mini-options-button" onclick="Options.toggleShowFullOptions('finality')">Full finality shard options: ~r Options.showFullOptions('finality') ? 'On' : 'Off' ~</button>
          </div></td>
          <td/>
        <tr/>
      </table>
      <span style="display: none;">Exported save (also copied to clipboard): <input id="export-output"></input></span>
      <br/>
      <br/>
      <div>
        Confirmations:
        <span ~style.display=Options.optionDisplay(SpecialDivs.isDivVisible('sacrifice')) ? '' : 'none'~>Sacrifice: <input type="checkbox" ~!checked=Options.confirmation('sacrifice')~ ~!onchange=function() {Options.setConfirmation('sacrifice', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(SpecialDivs.isDivVisible('prestige')) ? '' : 'none'~>Prestige: <input type="checkbox" ~!checked=Options.confirmation('prestige')~ ~!onchange=function() {Options.setConfirmation('prestige', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('infinity') || InfinityPrestigeLayer.canInfinity()) ? '' : 'none'~>Infinity: <input type="checkbox" ~!checked=Options.confirmation('infinity')~ ~!onchange=function() {Options.setConfirmation('infinity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity') || EternityPrestigeLayer.canEternity()) ? '' : 'none'~>Eternity: <input type="checkbox" ~!checked=Options.confirmation('eternity')~ ~!onchange=function() {Options.setConfirmation('eternity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(Permanence.hasGainedPermanence() || Permanence.canGainPermanence()) ? '' : 'none'~>Gaining permanence: <input type="checkbox" ~!checked=Options.confirmation('permanence')~ ~!onchange=function() {Options.setConfirmation('permanence', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
      </div>
      <div ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity') || ComplexityPrestigeLayer.canComplexity()) ? '' : 'none'~>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity') || ComplexityPrestigeLayer.canComplexity()) ? '' : 'none'~>Complexity: <input type="checkbox" ~!checked=Options.confirmation('complexity')~ ~!onchange=function() {Options.setConfirmation('complexity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~>Complexity reset: <input type="checkbox" ~!checked=Options.confirmation('complexityReset')~ ~!onchange=function() {Options.setConfirmation('complexityReset', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('finality') || FinalityPrestigeLayer.canFinality()) ? '' : 'none'~>Finality: <input type="checkbox" ~!checked=Options.confirmation('finality')~ ~!onchange=function() {Options.setConfirmation('finality', this.checked)}~></input></span>
      </div>
      <div ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~>Single study refund: <input type="checkbox" ~!checked=Options.confirmation('singleStudyRefund')~ ~!onchange=function() {Options.setConfirmation('singleStudyRefund', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('eternity')) ? '' : 'none'~>Studies respec: <input type="checkbox" ~!checked=Options.confirmation('studiesRespec')~ ~!onchange=function() {Options.setConfirmation('studiesRespec', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(EternityChallenge.areEternityChallengesVisible()) ? '' : 'none'~>Eternity challenge respec: <input type="checkbox" ~!checked=Options.confirmation('eternityChallengeRespec')~ ~!onchange=function() {Options.setConfirmation('eternityChallengeRespec', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~>Complexity challenge entering <span class="helpspan">(?)<span class="tooltiptext">This option is only used when the complexity challenge you're entering isn't yet unlocked.</span></span>: <input type="checkbox" ~!checked=Options.confirmation('complexityChallengeEntering')~ ~!onchange=function() {Options.setConfirmation('complexityChallengeEntering', this.checked)}~></input></span>
      </div>
      <div ~style.display=Options.optionDisplay(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>
        <span ~style.display=Options.optionDisplay(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Power deletion: <select ~!value=Powers.powerDeletionMode()~ ~!onchange=function() {Powers.setPowerDeletionMode(this.value)}~>
          <option value="Confirmation">Confirmation</option>
          <option value="No confirmation">No confirmation</option>
          <option value="Disabled">Disabled</option>
        </select><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Single power unequip: <select ~!value=Powers.powerUnequipMode()~ ~!onchange=function() {Powers.setPowerUnequipMode(this.value)}~>
          <option value="Confirmation">Confirmation</option>
          <option value="No confirmation">No confirmation</option>
          <option value="Disabled">Disabled</option>
        </select><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Powers unequip: <input type="checkbox" ~!checked=Options.confirmation('powersUnequip')~ ~!onchange=function() {Options.setConfirmation('powersUnequip', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Options.optionDisplay(PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Finality shard upgrades respec: <input type="checkbox" ~!checked=Options.confirmation('finalityShardUpgradesRespec')~ ~!onchange=function() {Options.setConfirmation('finalityShardUpgradesRespec', this.checked)}~></input></span>
      </div>
      <div>
        <span>Preset change: <input type="checkbox" ~!checked=Options.confirmation('presetChange')~ ~!onchange=function() {Options.setConfirmation('presetChange', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span>Preset deletion: <input type="checkbox" ~!checked=Options.confirmation('presetDeletion')~ ~!onchange=function() {Options.setConfirmation('presetDeletion', this.checked)}~></input></span>
      </div>
      <br/>
      <br/>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">List of hotkeys: ~r Hotkeys.listText() ~.</div>
      <br/>
      <span><a target="_blank" rel="noopener noreferrer" href="guide/index.html">Guide</a><span style="display: inline-block; width: 256px;"></span><a target="_blank" rel="noopener noreferrer" href="https://discord.gg/7JfmqF2">Discord</a><span style="display: inline-block; width: 256px;"></span><a target="_blank" rel="noopener noreferrer" href="https://github.com/dan-simon/misc">Github repository (also has other stuff)</a></span>
      <br/>
      <br/>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">
        <span>This game uses <a target="_blank" rel="noopener noreferrer" href="https://github.com/Patashu/break_infinity.js">break_infinity</a> for working with large numbers, <a target="_blank" rel="noopener noreferrer" href="https://github.com/antimatter-dimensions/notations">Antimatter Dimensions Notations</a> for displaying large numbers, and <a target="_blank" rel="noopener noreferrer" href="http://nodeca.github.io/pako/">pako</a> (a javascript port of <a target="_blank" rel="noopener noreferrer" href="http://www.zlib.net/">zlib</a>) for making saves shorter. All three are under an MIT license (zlib is under the zlib license).</span>
        <br/>
        <br/>
        <span>Thanks to Universal Attractor (pre-infinity) and Antimatter Dimensions for game mechanics.</span>
        <br/>
        <span>Thanks to the testers (Boo, Dravitar, Earth, Omsi, Pichu, Sere, SpectralFlame, others, and Jazz) for testing before release and suggesting features.</span>
        <br/>
        <span>Thanks to jdawson7 (clarifying strategy, improving guide), eQueline (suggesting many great QoL features), Kyleptune (suggesting the ability to change colors), and FIQ (noticing many UI confusions and inconsistencies, and suggesting a massive speed-up to autobuyers and max all).</span>
      </div>
    </tab>
  </div>
</body>
</html>
